Collaborators: Shane Blowes, Jon Chase, Helmut Hillebrand, Michael Burrows, Amanda Bates, Uli Brose, Benoit Gauzens, Laura Antao Assistance: Katherine Lew, Josef Hauser

Introduction

Methods

library(data.table) # for handling large datasets
library(ggplot2) # for some plotting
#library(lme4)
library(nlme) # for ME models
library(beanplot) # for beanplots
library(maps) # for map
library(ggeffects) # marginal effect plots
library(gridExtra) # to combine ggplots together
library(grid) # to combine ggplots together
library(gridExtra)

# tell RStudio to use project root directory as the root for this notebook. Needed since we are storing code in a separate directory.
knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file()) 
# Turnover and covariates assembled by turnover_vs_temperature_prep.Rmd
trends <- fread('output/turnover_w_covariates.csv.gz')

# set realm order
trends[, REALM := factor(REALM, levels = c('Freshwater', 'Marine', 'Terrestrial'), ordered = FALSE)]

# group Marine invertebrates/plants in with All
trends[, taxa_mod2 := taxa_mod]
trends[taxa_mod == 'Marine invertebrates/plants', taxa_mod2 := 'All']

Log-transform some variables, then center and scale.

trends[, tempave.sc := scale(tempave)]
trends[, tempave_metab.sc := scale(tempave_metab)]
trends[, seas.sc := scale(seas)]
trends[, microclim.sc := scale(log(microclim))]
trends[, temptrend.sc := scale(temptrend)]
trends[, temptrend_abs.sc := scale(log(abs(temptrend)))]
trends[, npp.sc := scale(log(npp))]
trends[, mass.sc := scale(log(mass_mean_weight))]
trends[, speed.sc := scale(log(speed_mean_weight+1))]
trends[, lifespan.sc := scale(log(lifespan_mean_weight))]
trends[, thermal_bias.sc := scale(thermal_bias)]
trends[, consumerfrac.sc := scale(consfrac)]
trends[, endothermfrac.sc := scale(endofrac)]
trends[, nspp.sc := scale(log(Nspp))]
trends[, human.sc := scale(human)]

Do the variables look ok?

# histograms to examine
cexmain = 0.6
par(mfrow = c(3,5))
invisible(trends[, hist(tempave.sc, main = 'Environmental temperature (°C)', cex.main = cexmain)])
invisible(trends[, hist(tempave_metab.sc, main = 'Metabolic temperature (°C)', cex.main = cexmain)])
invisible(trends[, hist(seas.sc, main = 'Seasonality (°C)', cex.main = cexmain)])
invisible(trends[, hist(microclim.sc, main = 'log Microclimates (°C)', cex.main = cexmain)])
invisible(trends[, hist(temptrend.sc, main = 'Temperature trend (°C/yr)', cex.main = cexmain)])
invisible(trends[, hist(temptrend_abs.sc, main = 'log abs(Temperature trend) (°C/yr)', cex.main = cexmain)])
invisible(trends[, hist(mass.sc, main = 'log Mass (g)', cex.main = cexmain)])
invisible(trends[, hist(speed.sc, main = 'log Speed (km/hr)', cex.main = cexmain)])
invisible(trends[, hist(lifespan.sc, main = 'log Lifespan (yr)', cex.main = cexmain)])
invisible(trends[, hist(consumerfrac.sc, main = 'Consumers (fraction)', cex.main = cexmain)])
invisible(trends[, hist(endothermfrac.sc, main = 'Endotherms (fraction)', cex.main = cexmain)])
invisible(trends[, hist(nspp.sc, main = 'log Species richness', cex.main = cexmain)])
invisible(trends[, hist(thermal_bias.sc, main = 'Thermal bias (°C)', cex.main = cexmain)])
invisible(trends[, hist(npp.sc, main = 'log Net primary productivity', cex.main = cexmain)])
invisible(trends[, hist(human.sc, main = 'Human impact score', cex.main = cexmain)])

Check correlations among variables. Pearson’s r is on the lower diagonal.

panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor, ...)
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(0, 1, 0, 1))
    r <- cor(x, y, use = 'pairwise.complete.obs')
    txt <- format(c(r, 0.123456789), digits = digits)[1]
    txt <- paste0(prefix, txt)
    if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
    text(0.5, 0.5, txt) #, cex = cex.cor * r)
}
pairs(formula = ~ REALM + tempave.sc + tempave_metab.sc + seas.sc + microclim.sc + temptrend.sc + temptrend_abs.sc +  mass.sc + speed.sc + lifespan.sc + consumerfrac.sc + endothermfrac.sc + nspp.sc + thermal_bias.sc + npp.sc + human.sc, data = trends, gap = 1/10, cex = 0.2, col = '#00000022', lower.panel = panel.cor)

Mass and lifespan look tightly correlated, but r only 0.56…? Tempave_metab and lifespan don’t look tightly correlated, but r= -0.81 Tempave_metab and speed don’t look tightly correlated, but r= -0.83 Lifespan and speed don’t look tightly correlated, but r = 0.73

Examine how many data points are available

# the cases we can compare
apply(trends[, .(Jtutrend, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, temptrend.sc, mass.sc, speed.sc, lifespan.sc, consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, human.sc)], MARGIN = 2, FUN = function(x) sum(!is.na(x)))
        Jtutrend            REALM       tempave.sc tempave_metab.sc          seas.sc     microclim.sc 
           53013            53013            49916            49916            49916            51834 
    temptrend.sc          mass.sc         speed.sc      lifespan.sc  consumerfrac.sc endothermfrac.sc 
           49916            52820            52689            51540            47534            53013 
         nspp.sc  thermal_bias.sc           npp.sc         human.sc 
           53013            49371            52863            53013 
i <- trends[, complete.cases(Jtutrend, temptrend.sc, tempave_metab.sc, REALM, seas.sc, microclim.sc, npp.sc, mass.sc, speed.sc, lifespan.sc, consumerfrac.sc, thermal_bias.sc)]
cat('Overall:\n')
Overall:
sum(i)
[1] 43585

Choose the variance structure for mixed effects modles

Try combinations of

  • variance scaled to a power of the number of years in the community time-series
  • variance scaled to a power of the abs temperature trend
  • random intercept for taxa_mod
  • random intercept for STUDY_ID
  • random slope (abs temperature trend) for taxa_mod
  • random slope (abs temperature trend) for STUDY_ID
  • random intercept for rarefyID (for overdispersion)

And choose the one with lowest AIC (not run: takes a long time)

# fit models for variance structure
fixed <- formula(Jtutrend ~ REALM + tempave_metab.sc + seas.sc + microclim.sc + npp.sc + temptrend_abs.sc +
                     mass.sc + speed.sc + lifespan.sc + consumerfrac.sc + thermal_bias.sc)
i <- trends[, complete.cases(Jtutrend, REALM, tempave_metab.sc, seas.sc, microclim.sc, npp.sc, temptrend_abs.sc,
                             mass.sc, speed.sc, lifespan.sc, consumerfrac.sc, thermal_bias.sc)]
mods <- vector('list', 0)
mods[[1]] <- gls(fixed, data = trends[i,])
mods[[2]] <- gls(fixed, data = trends[i,], weights = varPower(-0.5, ~nyrBT))
mods[[3]] <- gls(fixed, data = trends[i,], weights = varPower(0.5, ~ abs(temptrend)))

mods[[4]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2, control = lmeControl(opt = "optim"))
mods[[5]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID, control = lmeControl(opt = "optim"))
mods[[6]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID, control = lmeControl(opt = "optim"))
mods[[7]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID/rarefyID, control = lmeControl(opt = "optim"))
mods[[8]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID/rarefyID, control = lmeControl(opt = "optim"))

mods[[9]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc | taxa_mod)
mods[[10]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc | STUDY_ID)
mods[[11]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc | taxa_mod2/STUDY_ID, control = lmeControl(opt = "optim"))
mods[[12]] <- lme(fixed, data = trends[i,], random = list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)) # includes overdispersion. new formula so that random slope is only for study level (not enough data to extend to rarefyID).
mods[[13]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)) # 30+ min to fit

mods[[14]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID, weights = varPower(-0.5, ~nyrBT))
mods[[15]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2, weights = varPower(-0.5, ~nyrBT))
mods[[16]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID, weights = varPower(-0.5, ~nyrBT))
mods[[17]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID/rarefyID, weights = varPower(-0.5, ~nyrBT))
mods[[18]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID/rarefyID, weights = varPower(-0.5, ~nyrBT))
mods[[19]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc|STUDY_ID, weights = varPower(-0.5, ~nyrBT))
mods[[20]] <- lme(fixed, data = trends[i,], random = list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1), weights = varPower(-0.5, ~nyrBT))
mods[[21]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ 1), weights = varPower(-0.5, ~nyrBT))
mods[[22]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ 1, rarefyID = ~1), weights = varPower(-0.5, ~nyrBT))
mods[[23]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ temptrend_abs.sc), weights = varPower(-0.5, ~nyrBT)) # singular precision warning with lmeControl(opt = 'optim') and convergence error without
mods[[24]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1), weights = varPower(-0.5, ~nyrBT)) # singular precision warning with lmeControl(opt = 'optim') and convergence error without

mods[[25]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2, weights = varPower(-0.5, ~abs(temptrend)))
mods[[26]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID, weights = varPower(-0.5, ~abs(temptrend)))
mods[[27]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID/rarefyID, weights = varPower(-0.5, ~abs(temptrend)))
mods[[28]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID/rarefyID, weights = varPower(-0.5, ~abs(temptrend)))
mods[[29]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc|STUDY_ID, weights = varPower(-0.5, ~abs(temptrend)))
mods[[30]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc|taxa_mod2/STUDY_ID, weights = varPower(-0.5, ~abs(temptrend)), control = lmeControl(opt = "optim"))
mods[[31]] <- lme(fixed, data = trends[i,], random = list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1), weights = varPower(-0.5, ~abs(temptrend)))
mods[[32]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1), weights = varPower(-0.5, ~abs(temptrend)), control = lmeControl(opt = "optim")) # singular precision warning

aics <- sapply(mods, AIC)
minaics <- aics - min(aics)
minaics
which.min(aics)

Chooses the random slopes (temptrend_abs) & intercepts for STUDY_ID, overdispersion, and variance scaled to number of years. We haven’t dealt with potential testing on the boundary issues here yet.

Results

Where do we have data?

world <- map_data('world')
ggplot(world, aes(x = long, y = lat, group = group)) +
    geom_polygon(fill = 'lightgray', color = 'white') +
    geom_point(data = trends, aes(rarefyID_x, rarefyID_y, group = REALM, color = REALM), size = 0.5, alpha = 0.4)  +
    scale_color_brewer(palette="Set1")

Mostly northern hemisphere, but spread all over. No so much in Africa or much of Asia.

Plot turnover vs. explanatory variables

Lines are ggplot smoother fits by realm.

Strong trends with temperature change, but trends are pretty symmetric around no trend in temperature, which implies warming or cooling drives similar degree of community turnover. Some indication of less turnover for larger organisms (mass) Higher turnover on land with higher seasonality? More turnover for shorter-lived organisms? No really clear differences among realms.

Compare covariates across realms

i <- trends[, !duplicated(rarefyID)]; sum(i)
[1] 53013
par(mfrow=c(5,3))
beanplot(rarefyID_y ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Latitude (degN)', ll = 0.05)
beanplot(tempave ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Temperature (degC)', ll = 0.05)
beanplot(tempave_metab ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Metabolic Temperature (degC)', ll = 0.05, bw = 'nrd0') # nrd0 bandwidth to calculation gap
beanplot(seas ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Seasonality (degC)', ll = 0.05)
beanplot(microclim ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Microclimates (degC)', ll = 0.05)
log="y" selected
beanplot(temptrend ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Temperature trend (degC/yr)', ll = 0.05)
beanplot(mass_mean_weight ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Mass (g)', ll = 0.05, log = 'y')
beanplot(speed_mean_weight +1 ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Speed (km/hr)', ll = 0.05, log = 'y')
beanplot(lifespan_mean_weight ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Lifespan (yr)', ll = 0.05, log = 'y')
#beanplot(consfrac ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Consumers (fraction)', ll = 0.05, log = '') # too sparse
#beanplot(endofrac ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Endotherms (fraction)', ll = 0.05, log = '') # too sparse
beanplot(Nspp ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Number of species', ll = 0.05, log = 'y')
beanplot(thermal_bias ~ REALM, data = trends[i & !is.na(thermal_bias),], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Thermal bias (degC)', ll = 0.05)
beanplot(npp ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'NPP', ll = 0.05)
log="y" selected
beanplot(human ~ REALM, data = trends[i,], what = c(1,1,1,1), col = c("#CAB2D6", "#33A02C", "#B2DF8A"), border = "#CAB2D6", ylab = 'Human impact score', ll = 0.05)

Marine are in generally warmer locations (seawater doesn’t freeze) Marine have much lower seasonality. Marine and freshwater have some very small masses (plankton), but much of dataset is similar to terrestrial. Marine has a lot of slow, crawling organisms, but land has plants. Land also has birds (fast).

Jaccard turnover temporal trend

Try static covariates plus interactions of abs temperature trend with each covariate:

  • realm
  • environmental temperature
  • average metabolic temperature
  • seasonality
  • microclimates
  • NPP
  • speed
  • mass
  • lifespan
  • consumer vs. producer
  • thermal bias

Except for thermal bias: interact with temperature trend (not abs)

Full model

i <- trends[, complete.cases(Jtutrend, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, temptrend.sc, temptrend_abs.sc,  
                             mass.sc, speed.sc, lifespan.sc, consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, human.sc)]

randef <- list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

if(file.exists('temp/modTfull1.rds')){
  modTfull1 <- readRDS('temp/modTfull1.rds')
} else {
  modTfull1 <- lme(Jtutrend ~ temptrend_abs.sc*REALM + 
                     temptrend_abs.sc*tempave.sc +
                     temptrend_abs.sc*tempave_metab.sc + 
                     temptrend_abs.sc*seas.sc + 
                     temptrend_abs.sc*microclim.sc + 
                     temptrend_abs.sc*mass.sc + 
                     temptrend_abs.sc*speed.sc + 
                     temptrend_abs.sc*lifespan.sc + 
                     temptrend_abs.sc*consumerfrac.sc +
                     temptrend_abs.sc*endothermfrac.sc +
                     temptrend_abs.sc*nspp.sc +
                     temptrend.sc*thermal_bias.sc +
                     temptrend_abs.sc*npp.sc +
                     temptrend_abs.sc*human.sc*REALM,
                   random = randef, weights = varef, data = trends[i,], method = 'REML')
  saveRDS(modTfull1, file = 'temp/modTfull1.rds')
}

summary(modTfull1)
Linear mixed-effects model fit by REML
 Data: trends[i, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.05028541 (Intr)
temptrend_abs.sc 0.01934781 0.555 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.001189033 0.3037859

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.246996 
Fixed effects: Jtutrend ~ temptrend_abs.sc * REALM + temptrend_abs.sc * tempave.sc +      temptrend_abs.sc * tempave_metab.sc + temptrend_abs.sc *      seas.sc + temptrend_abs.sc * microclim.sc + temptrend_abs.sc *      mass.sc + temptrend_abs.sc * speed.sc + temptrend_abs.sc *      lifespan.sc + temptrend_abs.sc * consumerfrac.sc + temptrend_abs.sc *      endothermfrac.sc + temptrend_abs.sc * nspp.sc + temptrend.sc *      thermal_bias.sc + temptrend_abs.sc * npp.sc + temptrend_abs.sc *      human.sc * REALM 
 Correlation: 
                                           (Intr) tmpt_. REALMMr REALMTr tmpv.s tmpv_. ses.sc mcrcl. mss.sc
temptrend_abs.sc                            0.368                                                          
REALMMarine                                -0.918 -0.337                                                   
REALMTerrestrial                           -0.882 -0.333  0.807                                            
tempave.sc                                  0.000 -0.007 -0.013  -0.003                                    
tempave_metab.sc                            0.053  0.015 -0.042  -0.045  -0.278                            
seas.sc                                    -0.037 -0.004  0.053  -0.003   0.271 -0.083                     
microclim.sc                               -0.008  0.002  0.013  -0.010   0.049  0.067  0.170              
mass.sc                                     0.019  0.000 -0.004   0.001  -0.002 -0.550 -0.046 -0.015       
speed.sc                                    0.021  0.007 -0.034  -0.032  -0.003  0.170 -0.075 -0.032 -0.135
lifespan.sc                                 0.037  0.021 -0.024  -0.043  -0.037  0.752  0.094  0.047 -0.806
consumerfrac.sc                            -0.067 -0.057  0.074   0.342  -0.014 -0.090  0.004  0.007  0.063
endothermfrac.sc                            0.169  0.077 -0.087  -0.349   0.080 -0.167  0.048 -0.002  0.014
nspp.sc                                    -0.023  0.000 -0.002  -0.014  -0.047 -0.021 -0.033 -0.056 -0.156
temptrend.sc                               -0.005 -0.009  0.006   0.008  -0.060 -0.018 -0.044 -0.013  0.015
thermal_bias.sc                             0.030 -0.006 -0.044  -0.008   0.759 -0.044 -0.152 -0.131  0.039
npp.sc                                      0.004  0.000 -0.006  -0.001  -0.320  0.241 -0.256 -0.220 -0.011
human.sc                                   -0.166 -0.023  0.157   0.146   0.017 -0.005  0.008  0.017  0.006
temptrend_abs.sc:REALMMarine               -0.349 -0.953  0.369   0.315   0.007 -0.009  0.014  0.001  0.006
temptrend_abs.sc:REALMTerrestrial          -0.327 -0.874  0.301   0.367  -0.007 -0.016 -0.020 -0.012  0.012
temptrend_abs.sc:tempave.sc                 0.001 -0.004 -0.002  -0.003   0.099 -0.059  0.036 -0.028 -0.035
temptrend_abs.sc:tempave_metab.sc           0.009  0.032 -0.004  -0.005   0.033  0.330  0.018  0.085 -0.207
temptrend_abs.sc:seas.sc                    0.012 -0.029 -0.008  -0.023   0.153  0.024  0.227  0.027 -0.039
temptrend_abs.sc:microclim.sc              -0.004 -0.032  0.001  -0.002   0.012  0.099  0.059  0.312 -0.033
temptrend_abs.sc:mass.sc                   -0.001 -0.002  0.007   0.009  -0.016 -0.272 -0.038 -0.024  0.459
temptrend_abs.sc:speed.sc                  -0.001 -0.004  0.000  -0.005  -0.009  0.028 -0.028  0.002 -0.014
temptrend_abs.sc:lifespan.sc                0.009  0.040 -0.003  -0.010   0.000  0.378  0.049  0.026 -0.385
temptrend_abs.sc:consumerfrac.sc           -0.050 -0.058  0.050   0.124  -0.008 -0.067 -0.005 -0.003  0.037
                                           spd.sc lfspn. cnsmr. endth. nspp.s tmptr. thrm_. npp.sc hmn.sc
temptrend_abs.sc                                                                                         
REALMMarine                                                                                              
REALMTerrestrial                                                                                         
tempave.sc                                                                                               
tempave_metab.sc                                                                                         
seas.sc                                                                                                  
microclim.sc                                                                                             
mass.sc                                                                                                  
speed.sc                                                                                                 
lifespan.sc                                 0.265                                                        
consumerfrac.sc                            -0.163 -0.123                                                 
endothermfrac.sc                            0.083 -0.014 -0.440                                          
nspp.sc                                    -0.050  0.098  0.014  0.057                                   
temptrend.sc                               -0.011 -0.012  0.011  0.002  0.015                            
thermal_bias.sc                             0.019 -0.067  0.001 -0.006 -0.106 -0.001                     
npp.sc                                     -0.021  0.059 -0.047 -0.090 -0.162 -0.012 -0.137              
human.sc                                    0.004  0.007  0.013 -0.002 -0.015  0.008  0.016 -0.029       
temptrend_abs.sc:REALMMarine               -0.011 -0.015  0.060 -0.051 -0.007  0.006  0.005 -0.008  0.023
temptrend_abs.sc:REALMTerrestrial          -0.010 -0.022  0.139 -0.130 -0.015  0.009  0.001  0.013  0.020
temptrend_abs.sc:tempave.sc                -0.031  0.005 -0.005  0.024 -0.002 -0.071  0.016 -0.031 -0.004
temptrend_abs.sc:tempave_metab.sc           0.074  0.300 -0.034 -0.060 -0.025  0.001  0.090  0.027  0.003
temptrend_abs.sc:seas.sc                   -0.029  0.042  0.016  0.002 -0.006 -0.029  0.098 -0.178 -0.003
temptrend_abs.sc:microclim.sc               0.008  0.022  0.002 -0.032  0.005  0.003 -0.029 -0.141  0.002
temptrend_abs.sc:mass.sc                   -0.043 -0.385  0.037  0.006 -0.056  0.019  0.014  0.007  0.009
temptrend_abs.sc:speed.sc                   0.180  0.051 -0.041  0.027 -0.024 -0.006  0.010  0.012  0.012
temptrend_abs.sc:lifespan.sc                0.095  0.475 -0.057 -0.035  0.040 -0.015 -0.014  0.016 -0.001
temptrend_abs.sc:consumerfrac.sc           -0.055 -0.077  0.278 -0.127  0.008  0.009 -0.009 -0.018 -0.011
                                           tm_.:REALMM tm_.:REALMT tmptrnd_bs.sc:t. t_.:_. tmptrnd_bs.sc:ss.
temptrend_abs.sc                                                                                            
REALMMarine                                                                                                 
REALMTerrestrial                                                                                            
tempave.sc                                                                                                  
tempave_metab.sc                                                                                            
seas.sc                                                                                                     
microclim.sc                                                                                                
mass.sc                                                                                                     
speed.sc                                                                                                    
lifespan.sc                                                                                                 
consumerfrac.sc                                                                                             
endothermfrac.sc                                                                                            
nspp.sc                                                                                                     
temptrend.sc                                                                                                
thermal_bias.sc                                                                                             
npp.sc                                                                                                      
human.sc                                                                                                    
temptrend_abs.sc:REALMMarine                                                                                
temptrend_abs.sc:REALMTerrestrial           0.829                                                           
temptrend_abs.sc:tempave.sc                 0.003       0.003                                               
temptrend_abs.sc:tempave_metab.sc          -0.023      -0.030      -0.639                                   
temptrend_abs.sc:seas.sc                    0.054      -0.050       0.206            0.017                  
temptrend_abs.sc:microclim.sc               0.042      -0.002      -0.039            0.010  0.048           
temptrend_abs.sc:mass.sc                    0.015       0.027      -0.059           -0.424 -0.029           
temptrend_abs.sc:speed.sc                  -0.024      -0.008      -0.042            0.093 -0.037           
temptrend_abs.sc:lifespan.sc               -0.033      -0.040      -0.003            0.633  0.055           
temptrend_abs.sc:consumerfrac.sc            0.071       0.267       0.023           -0.114 -0.029           
                                           tmptrnd_bs.sc:mc. tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp.
temptrend_abs.sc                                                                                
REALMMarine                                                                                     
REALMTerrestrial                                                                                
tempave.sc                                                                                      
tempave_metab.sc                                                                                
seas.sc                                                                                         
microclim.sc                                                                                    
mass.sc                                                                                         
speed.sc                                                                                        
lifespan.sc                                                                                     
consumerfrac.sc                                                                                 
endothermfrac.sc                                                                                
nspp.sc                                                                                         
temptrend.sc                                                                                    
thermal_bias.sc                                                                                 
npp.sc                                                                                          
human.sc                                                                                        
temptrend_abs.sc:REALMMarine                                                                    
temptrend_abs.sc:REALMTerrestrial                                                               
temptrend_abs.sc:tempave.sc                                                                     
temptrend_abs.sc:tempave_metab.sc                                                               
temptrend_abs.sc:seas.sc                                                                        
temptrend_abs.sc:microclim.sc                                                                   
temptrend_abs.sc:mass.sc                    0.014                                               
temptrend_abs.sc:speed.sc                  -0.038            -0.059                             
temptrend_abs.sc:lifespan.sc                0.013            -0.805             0.150           
temptrend_abs.sc:consumerfrac.sc            0.008             0.062            -0.234           
                                           tmptrnd_bs.sc:l. tmptrnd_bs.sc:c. tmptrnd_bs.sc:nd.
temptrend_abs.sc                                                                              
REALMMarine                                                                                   
REALMTerrestrial                                                                              
tempave.sc                                                                                    
tempave_metab.sc                                                                              
seas.sc                                                                                       
microclim.sc                                                                                  
mass.sc                                                                                       
speed.sc                                                                                      
lifespan.sc                                                                                   
consumerfrac.sc                                                                               
endothermfrac.sc                                                                              
nspp.sc                                                                                       
temptrend.sc                                                                                  
thermal_bias.sc                                                                               
npp.sc                                                                                        
human.sc                                                                                      
temptrend_abs.sc:REALMMarine                                                                  
temptrend_abs.sc:REALMTerrestrial                                                             
temptrend_abs.sc:tempave.sc                                                                   
temptrend_abs.sc:tempave_metab.sc                                                             
temptrend_abs.sc:seas.sc                                                                      
temptrend_abs.sc:microclim.sc                                                                 
temptrend_abs.sc:mass.sc                                                                      
temptrend_abs.sc:speed.sc                                                                     
temptrend_abs.sc:lifespan.sc                                                                  
temptrend_abs.sc:consumerfrac.sc           -0.147                                             
                                           tmptrnd_bs.sc:ns. tm.:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:h.
temptrend_abs.sc                                                                                      
REALMMarine                                                                                           
REALMTerrestrial                                                                                      
tempave.sc                                                                                            
tempave_metab.sc                                                                                      
seas.sc                                                                                               
microclim.sc                                                                                          
mass.sc                                                                                               
speed.sc                                                                                              
lifespan.sc                                                                                           
consumerfrac.sc                                                                                       
endothermfrac.sc                                                                                      
nspp.sc                                                                                               
temptrend.sc                                                                                          
thermal_bias.sc                                                                                       
npp.sc                                                                                                
human.sc                                                                                              
temptrend_abs.sc:REALMMarine                                                                          
temptrend_abs.sc:REALMTerrestrial                                                                     
temptrend_abs.sc:tempave.sc                                                                           
temptrend_abs.sc:tempave_metab.sc                                                                     
temptrend_abs.sc:seas.sc                                                                              
temptrend_abs.sc:microclim.sc                                                                         
temptrend_abs.sc:mass.sc                                                                              
temptrend_abs.sc:speed.sc                                                                             
temptrend_abs.sc:lifespan.sc                                                                          
temptrend_abs.sc:consumerfrac.sc                                                                      
                                           REALMM: REALMT: t_.:REALMM:
temptrend_abs.sc                                                      
REALMMarine                                                           
REALMTerrestrial                                                      
tempave.sc                                                            
tempave_metab.sc                                                      
seas.sc                                                               
microclim.sc                                                          
mass.sc                                                               
speed.sc                                                              
lifespan.sc                                                           
consumerfrac.sc                                                       
endothermfrac.sc                                                      
nspp.sc                                                               
temptrend.sc                                                          
thermal_bias.sc                                                       
npp.sc                                                                
human.sc                                                              
temptrend_abs.sc:REALMMarine                                          
temptrend_abs.sc:REALMTerrestrial                                     
temptrend_abs.sc:tempave.sc                                           
temptrend_abs.sc:tempave_metab.sc                                     
temptrend_abs.sc:seas.sc                                              
temptrend_abs.sc:microclim.sc                                         
temptrend_abs.sc:mass.sc                                              
temptrend_abs.sc:speed.sc                                             
temptrend_abs.sc:lifespan.sc                                          
temptrend_abs.sc:consumerfrac.sc                                      
 [ reached getOption("max.print") -- omitted 9 rows ]

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-7.58461466 -0.34521721  0.05131203  0.55413461  6.93144917 

Number of Observations: 43585
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   250                  43585 

Try simplifying the model

if(file.exists('temp/modTfull1simp.rds')){
  modTfull1simp <- readRDS('temp/modTfull1simp.rds')
} else {
  require(MASS) # for stepAIC
  modTfull1ml <- update(modTfull1, method = 'ML')
  modTfull1simp <- stepAIC(modTfull1ml, direction = 'backward')
  saveRDS(modTfull1simp, file = 'temp/modTfull1simp.rds')
}
Start:  AIC=-130792.1
Jtutrend ~ temptrend_abs.sc * REALM + temptrend_abs.sc * tempave.sc + 
    temptrend_abs.sc * tempave_metab.sc + temptrend_abs.sc * 
    seas.sc + temptrend_abs.sc * microclim.sc + temptrend_abs.sc * 
    mass.sc + temptrend_abs.sc * speed.sc + temptrend_abs.sc * 
    lifespan.sc + temptrend_abs.sc * consumerfrac.sc + temptrend_abs.sc * 
    endothermfrac.sc + temptrend_abs.sc * nspp.sc + temptrend.sc * 
    thermal_bias.sc + temptrend_abs.sc * npp.sc + temptrend_abs.sc * 
    human.sc * REALM

                                    Df     AIC
- temptrend_abs.sc:tempave.sc        1 -130794
- temptrend_abs.sc:endothermfrac.sc  1 -130794
- temptrend_abs.sc:consumerfrac.sc   1 -130793
- temptrend_abs.sc:speed.sc          1 -130793
<none>                                 -130792
- temptrend_abs.sc:REALM:human.sc    2 -130792
- temptrend.sc:thermal_bias.sc       1 -130790
- temptrend_abs.sc:npp.sc            1 -130789
- temptrend_abs.sc:seas.sc           1 -130789
- temptrend_abs.sc:tempave_metab.sc  1 -130783
- temptrend_abs.sc:lifespan.sc       1 -130777
- temptrend_abs.sc:microclim.sc      1 -130775
- temptrend_abs.sc:mass.sc           1 -130760
- temptrend_abs.sc:nspp.sc           1 -130381

Step:  AIC=-130793.9
Jtutrend ~ temptrend_abs.sc + REALM + tempave.sc + tempave_metab.sc + 
    seas.sc + microclim.sc + mass.sc + speed.sc + lifespan.sc + 
    consumerfrac.sc + endothermfrac.sc + nspp.sc + temptrend.sc + 
    thermal_bias.sc + npp.sc + human.sc + temptrend_abs.sc:REALM + 
    temptrend_abs.sc:tempave_metab.sc + temptrend_abs.sc:seas.sc + 
    temptrend_abs.sc:microclim.sc + temptrend_abs.sc:mass.sc + 
    temptrend_abs.sc:speed.sc + temptrend_abs.sc:lifespan.sc + 
    temptrend_abs.sc:consumerfrac.sc + temptrend_abs.sc:endothermfrac.sc + 
    temptrend_abs.sc:nspp.sc + temptrend.sc:thermal_bias.sc + 
    temptrend_abs.sc:npp.sc + temptrend_abs.sc:human.sc + REALM:human.sc + 
    temptrend_abs.sc:REALM:human.sc

                                    Df     AIC
- temptrend_abs.sc:endothermfrac.sc  1 -130796
- temptrend_abs.sc:consumerfrac.sc   1 -130795
- temptrend_abs.sc:speed.sc          1 -130795
<none>                                 -130794
- temptrend_abs.sc:REALM:human.sc    2 -130793
- tempave.sc                         1 -130792
- temptrend.sc:thermal_bias.sc       1 -130792
- temptrend_abs.sc:npp.sc            1 -130791
- temptrend_abs.sc:seas.sc           1 -130790
- temptrend_abs.sc:tempave_metab.sc  1 -130780
- temptrend_abs.sc:lifespan.sc       1 -130779
- temptrend_abs.sc:microclim.sc      1 -130777
- temptrend_abs.sc:mass.sc           1 -130761
- temptrend_abs.sc:nspp.sc           1 -130383

Step:  AIC=-130795.6
Jtutrend ~ temptrend_abs.sc + REALM + tempave.sc + tempave_metab.sc + 
    seas.sc + microclim.sc + mass.sc + speed.sc + lifespan.sc + 
    consumerfrac.sc + endothermfrac.sc + nspp.sc + temptrend.sc + 
    thermal_bias.sc + npp.sc + human.sc + temptrend_abs.sc:REALM + 
    temptrend_abs.sc:tempave_metab.sc + temptrend_abs.sc:seas.sc + 
    temptrend_abs.sc:microclim.sc + temptrend_abs.sc:mass.sc + 
    temptrend_abs.sc:speed.sc + temptrend_abs.sc:lifespan.sc + 
    temptrend_abs.sc:consumerfrac.sc + temptrend_abs.sc:nspp.sc + 
    temptrend.sc:thermal_bias.sc + temptrend_abs.sc:npp.sc + 
    temptrend_abs.sc:human.sc + REALM:human.sc + temptrend_abs.sc:REALM:human.sc

                                    Df     AIC
- temptrend_abs.sc:speed.sc          1 -130796
- temptrend_abs.sc:consumerfrac.sc   1 -130796
<none>                                 -130796
- temptrend_abs.sc:REALM:human.sc    2 -130795
- tempave.sc                         1 -130794
- temptrend.sc:thermal_bias.sc       1 -130793
- temptrend_abs.sc:npp.sc            1 -130792
- temptrend_abs.sc:seas.sc           1 -130792
- endothermfrac.sc                   1 -130786
- temptrend_abs.sc:tempave_metab.sc  1 -130782
- temptrend_abs.sc:lifespan.sc       1 -130781
- temptrend_abs.sc:microclim.sc      1 -130778
- temptrend_abs.sc:mass.sc           1 -130763
- temptrend_abs.sc:nspp.sc           1 -130382

Step:  AIC=-130795.9
Jtutrend ~ temptrend_abs.sc + REALM + tempave.sc + tempave_metab.sc + 
    seas.sc + microclim.sc + mass.sc + speed.sc + lifespan.sc + 
    consumerfrac.sc + endothermfrac.sc + nspp.sc + temptrend.sc + 
    thermal_bias.sc + npp.sc + human.sc + temptrend_abs.sc:REALM + 
    temptrend_abs.sc:tempave_metab.sc + temptrend_abs.sc:seas.sc + 
    temptrend_abs.sc:microclim.sc + temptrend_abs.sc:mass.sc + 
    temptrend_abs.sc:lifespan.sc + temptrend_abs.sc:consumerfrac.sc + 
    temptrend_abs.sc:nspp.sc + temptrend.sc:thermal_bias.sc + 
    temptrend_abs.sc:npp.sc + temptrend_abs.sc:human.sc + REALM:human.sc + 
    temptrend_abs.sc:REALM:human.sc

                                    Df     AIC
- temptrend_abs.sc:consumerfrac.sc   1 -130797
<none>                                 -130796
- temptrend_abs.sc:REALM:human.sc    2 -130795
- speed.sc                           1 -130795
- tempave.sc                         1 -130794
- temptrend.sc:thermal_bias.sc       1 -130793
- temptrend_abs.sc:npp.sc            1 -130793
- temptrend_abs.sc:seas.sc           1 -130792
- endothermfrac.sc                   1 -130786
- temptrend_abs.sc:tempave_metab.sc  1 -130783
- temptrend_abs.sc:lifespan.sc       1 -130782
- temptrend_abs.sc:microclim.sc      1 -130779
- temptrend_abs.sc:mass.sc           1 -130764
- temptrend_abs.sc:nspp.sc           1 -130379

Step:  AIC=-130796.6
Jtutrend ~ temptrend_abs.sc + REALM + tempave.sc + tempave_metab.sc + 
    seas.sc + microclim.sc + mass.sc + speed.sc + lifespan.sc + 
    consumerfrac.sc + endothermfrac.sc + nspp.sc + temptrend.sc + 
    thermal_bias.sc + npp.sc + human.sc + temptrend_abs.sc:REALM + 
    temptrend_abs.sc:tempave_metab.sc + temptrend_abs.sc:seas.sc + 
    temptrend_abs.sc:microclim.sc + temptrend_abs.sc:mass.sc + 
    temptrend_abs.sc:lifespan.sc + temptrend_abs.sc:nspp.sc + 
    temptrend.sc:thermal_bias.sc + temptrend_abs.sc:npp.sc + 
    temptrend_abs.sc:human.sc + REALM:human.sc + temptrend_abs.sc:REALM:human.sc

                                    Df     AIC
- consumerfrac.sc                    1 -130798
<none>                                 -130797
- temptrend_abs.sc:REALM:human.sc    2 -130796
- speed.sc                           1 -130795
- tempave.sc                         1 -130794
- temptrend.sc:thermal_bias.sc       1 -130794
- temptrend_abs.sc:npp.sc            1 -130793
- temptrend_abs.sc:seas.sc           1 -130793
- endothermfrac.sc                   1 -130787
- temptrend_abs.sc:tempave_metab.sc  1 -130785
- temptrend_abs.sc:lifespan.sc       1 -130784
- temptrend_abs.sc:microclim.sc      1 -130780
- temptrend_abs.sc:mass.sc           1 -130765
- temptrend_abs.sc:nspp.sc           1 -130381

Step:  AIC=-130797.6
Jtutrend ~ temptrend_abs.sc + REALM + tempave.sc + tempave_metab.sc + 
    seas.sc + microclim.sc + mass.sc + speed.sc + lifespan.sc + 
    endothermfrac.sc + nspp.sc + temptrend.sc + thermal_bias.sc + 
    npp.sc + human.sc + temptrend_abs.sc:REALM + temptrend_abs.sc:tempave_metab.sc + 
    temptrend_abs.sc:seas.sc + temptrend_abs.sc:microclim.sc + 
    temptrend_abs.sc:mass.sc + temptrend_abs.sc:lifespan.sc + 
    temptrend_abs.sc:nspp.sc + temptrend.sc:thermal_bias.sc + 
    temptrend_abs.sc:npp.sc + temptrend_abs.sc:human.sc + REALM:human.sc + 
    temptrend_abs.sc:REALM:human.sc

                                    Df     AIC
<none>                                 -130798
- speed.sc                           1 -130797
- temptrend_abs.sc:REALM:human.sc    2 -130796
- tempave.sc                         1 -130796
- temptrend.sc:thermal_bias.sc       1 -130795
- temptrend_abs.sc:npp.sc            1 -130794
- temptrend_abs.sc:seas.sc           1 -130794
- endothermfrac.sc                   1 -130789
- temptrend_abs.sc:tempave_metab.sc  1 -130786
- temptrend_abs.sc:lifespan.sc       1 -130785
- temptrend_abs.sc:microclim.sc      1 -130781
- temptrend_abs.sc:mass.sc           1 -130766
- temptrend_abs.sc:nspp.sc           1 -130382
summary(modTfull1simp)
Linear mixed-effects model fit by maximum likelihood
 Data: trends[i, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.04935417 (Intr)
temptrend_abs.sc 0.01813999 0.582 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.001168172 0.3039957

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.247572 
Fixed effects: Jtutrend ~ temptrend_abs.sc + REALM + tempave.sc + tempave_metab.sc +      seas.sc + microclim.sc + mass.sc + speed.sc + lifespan.sc +      endothermfrac.sc + nspp.sc + temptrend.sc + thermal_bias.sc +      npp.sc + human.sc + temptrend_abs.sc:REALM + temptrend_abs.sc:tempave_metab.sc +      temptrend_abs.sc:seas.sc + temptrend_abs.sc:microclim.sc +      temptrend_abs.sc:mass.sc + temptrend_abs.sc:lifespan.sc +      temptrend_abs.sc:nspp.sc + temptrend.sc:thermal_bias.sc +      temptrend_abs.sc:npp.sc + temptrend_abs.sc:human.sc + REALM:human.sc +      temptrend_abs.sc:REALM:human.sc 
 Correlation: 
                                           (Intr) tmpt_. REALMMr REALMTr tmpv.s tmpv_. ses.sc mcrcl. mss.sc
temptrend_abs.sc                            0.372                                                          
REALMMarine                                -0.918 -0.344                                                   
REALMTerrestrial                           -0.916 -0.336  0.834                                            
tempave.sc                                  0.004  0.006 -0.015  -0.006                                    
tempave_metab.sc                            0.053  0.023 -0.038  -0.023  -0.289                            
seas.sc                                    -0.037 -0.001  0.053  -0.006   0.268 -0.084                     
microclim.sc                               -0.005  0.007  0.012  -0.017   0.049  0.063  0.171              
mass.sc                                     0.022  0.000 -0.009  -0.020   0.006 -0.551 -0.045 -0.015       
speed.sc                                    0.014  0.005 -0.025   0.022  -0.003  0.153 -0.071 -0.034 -0.128
lifespan.sc                                 0.033  0.024 -0.016  -0.006  -0.048  0.750  0.095  0.046 -0.807
endothermfrac.sc                            0.145  0.009 -0.055  -0.222   0.126 -0.213  0.071  0.018  0.037
nspp.sc                                    -0.027 -0.009 -0.002  -0.014  -0.041 -0.012 -0.032 -0.053 -0.161
temptrend.sc                               -0.007 -0.013  0.006   0.007  -0.050 -0.017 -0.041 -0.014  0.010
thermal_bias.sc                             0.036  0.008 -0.047  -0.017   0.760 -0.054 -0.156 -0.135  0.043
npp.sc                                      0.001 -0.002 -0.003   0.016  -0.322  0.237 -0.255 -0.221 -0.009
human.sc                                   -0.168 -0.019  0.159   0.154   0.018 -0.004  0.008  0.017  0.006
temptrend_abs.sc:REALMMarine               -0.353 -0.955  0.377   0.318   0.000 -0.010  0.012 -0.003  0.004
temptrend_abs.sc:REALMTerrestrial          -0.331 -0.896  0.309   0.349  -0.030 -0.022 -0.028 -0.025  0.009
temptrend_abs.sc:tempave_metab.sc           0.026  0.083 -0.009  -0.018   0.102  0.364  0.049  0.079 -0.303
temptrend_abs.sc:seas.sc                    0.019 -0.013 -0.011  -0.041   0.126  0.025  0.223  0.029 -0.028
temptrend_abs.sc:microclim.sc              -0.005 -0.038  0.002  -0.002   0.017  0.100  0.060  0.314 -0.036
temptrend_abs.sc:mass.sc                    0.002 -0.002  0.003  -0.004  -0.008 -0.274 -0.037 -0.025  0.457
temptrend_abs.sc:lifespan.sc                0.010  0.051  0.001   0.003  -0.011  0.367  0.049  0.022 -0.385
temptrend_abs.sc:nspp.sc                   -0.008  0.023 -0.002   0.002  -0.027  0.015  0.001  0.013 -0.071
temptrend.sc:thermal_bias.sc                0.009  0.019 -0.009  -0.007   0.067  0.032  0.000 -0.032 -0.002
temptrend_abs.sc:npp.sc                     0.002 -0.057 -0.007   0.013  -0.116  0.095 -0.162 -0.164  0.013
temptrend_abs.sc:human.sc                  -0.069  0.174  0.065   0.062  -0.005 -0.009  0.005  0.006  0.009
REALMMarine:human.sc                        0.169  0.020 -0.160  -0.154  -0.020  0.004 -0.016 -0.024 -0.005
REALMTerrestrial:human.sc                   0.168  0.019 -0.159  -0.153  -0.032  0.007 -0.022 -0.006 -0.002
temptrend_abs.sc:REALMMarine:human.sc       0.069 -0.172 -0.065  -0.062   0.001  0.009 -0.009 -0.009 -0.009
temptrend_abs.sc:REALMTerrestrial:human.sc  0.069 -0.174 -0.065  -0.062   0.012  0.007 -0.003 -0.005 -0.008
                                           spd.sc lfspn. endth. nspp.s tmptr. thrm_. npp.sc hmn.sc
temptrend_abs.sc                                                                                  
REALMMarine                                                                                       
REALMTerrestrial                                                                                  
tempave.sc                                                                                        
tempave_metab.sc                                                                                  
seas.sc                                                                                           
microclim.sc                                                                                      
mass.sc                                                                                           
speed.sc                                                                                          
lifespan.sc                                 0.246                                                 
endothermfrac.sc                            0.024 -0.054                                          
nspp.sc                                    -0.043  0.108  0.051                                   
temptrend.sc                               -0.009 -0.007 -0.003  0.013                            
thermal_bias.sc                             0.016 -0.076  0.029 -0.100  0.003                     
npp.sc                                     -0.032  0.053 -0.130 -0.161 -0.013 -0.138              
human.sc                                    0.004  0.008  0.006 -0.015  0.008  0.015 -0.029       
temptrend_abs.sc:REALMMarine               -0.002 -0.012  0.005 -0.003  0.008 -0.003 -0.006  0.020
temptrend_abs.sc:REALMTerrestrial          -0.002 -0.018  0.018  0.000  0.015 -0.024  0.020  0.019
temptrend_abs.sc:tempave_metab.sc           0.047  0.385  0.034 -0.009 -0.049  0.107  0.003 -0.001
temptrend_abs.sc:seas.sc                   -0.017  0.035  0.055  0.001 -0.011  0.086 -0.178 -0.004
temptrend_abs.sc:microclim.sc               0.015  0.025 -0.043  0.003  0.000 -0.026 -0.142  0.002
temptrend_abs.sc:mass.sc                   -0.031 -0.382  0.024 -0.060  0.013  0.017  0.008  0.010
temptrend_abs.sc:lifespan.sc                0.063  0.466 -0.029  0.054 -0.010 -0.027  0.011 -0.004
temptrend_abs.sc:nspp.sc                    0.029  0.076 -0.031  0.303  0.015 -0.051 -0.017 -0.012
temptrend.sc:thermal_bias.sc                0.008  0.003  0.009 -0.009 -0.402 -0.015 -0.003 -0.006
temptrend_abs.sc:npp.sc                     0.000  0.011 -0.063 -0.034 -0.016 -0.044  0.367 -0.012
temptrend_abs.sc:human.sc                  -0.007 -0.009  0.000 -0.003  0.006 -0.009 -0.012  0.410
REALMMarine:human.sc                       -0.004 -0.009 -0.006  0.013 -0.008 -0.014  0.018 -0.998
REALMTerrestrial:human.sc                  -0.001 -0.013 -0.011  0.018 -0.007 -0.020  0.027 -0.998
temptrend_abs.sc:REALMMarine:human.sc       0.007  0.008  0.000  0.000 -0.006  0.006  0.008 -0.409
temptrend_abs.sc:REALMTerrestrial:human.sc  0.007  0.008  0.002  0.004 -0.006  0.011  0.013 -0.407
                                           tm_.:REALMM tm_.:REALMT t_.:_. tmptrnd_bs.sc:s. tmptrnd_bs.sc:mc.
temptrend_abs.sc                                                                                            
REALMMarine                                                                                                 
REALMTerrestrial                                                                                            
tempave.sc                                                                                                  
tempave_metab.sc                                                                                            
seas.sc                                                                                                     
microclim.sc                                                                                                
mass.sc                                                                                                     
speed.sc                                                                                                    
lifespan.sc                                                                                                 
endothermfrac.sc                                                                                            
nspp.sc                                                                                                     
temptrend.sc                                                                                                
thermal_bias.sc                                                                                             
npp.sc                                                                                                      
human.sc                                                                                                    
temptrend_abs.sc:REALMMarine                                                                                
temptrend_abs.sc:REALMTerrestrial           0.855                                                           
temptrend_abs.sc:tempave_metab.sc          -0.050      -0.101                                               
temptrend_abs.sc:seas.sc                    0.046      -0.086       0.168                                   
temptrend_abs.sc:microclim.sc               0.045       0.002      -0.012  0.058                            
temptrend_abs.sc:mass.sc                    0.012       0.018      -0.630 -0.016            0.008           
temptrend_abs.sc:lifespan.sc               -0.033      -0.039       0.829  0.044            0.020           
temptrend_abs.sc:nspp.sc                   -0.056      -0.041       0.083 -0.056           -0.173           
temptrend.sc:thermal_bias.sc               -0.017      -0.020       0.071 -0.031           -0.036           
temptrend_abs.sc:npp.sc                     0.042       0.056       0.046 -0.168           -0.212           
temptrend_abs.sc:human.sc                  -0.165      -0.151      -0.030 -0.019            0.039           
REALMMarine:human.sc                       -0.020      -0.019       0.001 -0.001           -0.005           
REALMTerrestrial:human.sc                  -0.020      -0.018      -0.001 -0.002            0.001           
temptrend_abs.sc:REALMMarine:human.sc       0.163       0.151       0.030  0.010           -0.038           
temptrend_abs.sc:REALMTerrestrial:human.sc  0.164       0.150       0.023  0.016           -0.027           
                                           tmptrnd_bs.sc:ms. tmptrnd_bs.sc:l. tmptrnd_bs.sc:ns. tm.:_.
temptrend_abs.sc                                                                                      
REALMMarine                                                                                           
REALMTerrestrial                                                                                      
tempave.sc                                                                                            
tempave_metab.sc                                                                                      
seas.sc                                                                                               
microclim.sc                                                                                          
mass.sc                                                                                               
speed.sc                                                                                              
lifespan.sc                                                                                           
endothermfrac.sc                                                                                      
nspp.sc                                                                                               
temptrend.sc                                                                                          
thermal_bias.sc                                                                                       
npp.sc                                                                                                
human.sc                                                                                              
temptrend_abs.sc:REALMMarine                                                                          
temptrend_abs.sc:REALMTerrestrial                                                                     
temptrend_abs.sc:tempave_metab.sc                                                                     
temptrend_abs.sc:seas.sc                                                                              
temptrend_abs.sc:microclim.sc                                                                         
temptrend_abs.sc:mass.sc                                                                              
temptrend_abs.sc:lifespan.sc               -0.815                                                     
temptrend_abs.sc:nspp.sc                   -0.224             0.233                                   
temptrend.sc:thermal_bias.sc               -0.004            -0.004            0.003                  
temptrend_abs.sc:npp.sc                    -0.032             0.042           -0.188             0.001
temptrend_abs.sc:human.sc                   0.049            -0.026           -0.033            -0.004
REALMMarine:human.sc                       -0.009             0.003            0.010             0.005
REALMTerrestrial:human.sc                  -0.008             0.002            0.013             0.004
temptrend_abs.sc:REALMMarine:human.sc      -0.049             0.026            0.029             0.005
temptrend_abs.sc:REALMTerrestrial:human.sc -0.045             0.021            0.034             0.006
                                           tmptrnd_bs.sc:np. tmptrnd_bs.sc:h. REALMM: REALMT: t_.:REALMM:
temptrend_abs.sc                                                                                         
REALMMarine                                                                                              
REALMTerrestrial                                                                                         
tempave.sc                                                                                               
tempave_metab.sc                                                                                         
seas.sc                                                                                                  
microclim.sc                                                                                             
mass.sc                                                                                                  
speed.sc                                                                                                 
lifespan.sc                                                                                              
endothermfrac.sc                                                                                         
nspp.sc                                                                                                  
temptrend.sc                                                                                             
thermal_bias.sc                                                                                          
npp.sc                                                                                                   
human.sc                                                                                                 
temptrend_abs.sc:REALMMarine                                                                             
temptrend_abs.sc:REALMTerrestrial                                                                        
temptrend_abs.sc:tempave_metab.sc                                                                        
temptrend_abs.sc:seas.sc                                                                                 
temptrend_abs.sc:microclim.sc                                                                            
temptrend_abs.sc:mass.sc                                                                                 
temptrend_abs.sc:lifespan.sc                                                                             
temptrend_abs.sc:nspp.sc                                                                                 
temptrend.sc:thermal_bias.sc                                                                             
temptrend_abs.sc:npp.sc                                                                                  
temptrend_abs.sc:human.sc                  -0.033                                                        
REALMMarine:human.sc                        0.008            -0.409                                      
REALMTerrestrial:human.sc                   0.012            -0.409            0.997                     
temptrend_abs.sc:REALMMarine:human.sc       0.023            -0.998            0.410   0.408             
temptrend_abs.sc:REALMTerrestrial:human.sc  0.029            -0.993            0.406   0.406   0.991     

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-7.59895515 -0.34513651  0.05160027  0.55556600  6.91372100 

Number of Observations: 43585
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   250                  43585 

Plot the coefficients

Plot residuals against each predictor

resids <- resid(modTfull1simpreml)
preds <- getData(modTfull1simpreml)
col = '#00000033'
cex = 0.5
par(mfrow = c(4,3))
boxplot(resids ~ preds$REALM, cex = cex, col = col)
plot(preds$temptrend_abs.sc, resids, cex = cex, col = col)
plot(preds$temptrend.sc, resids, cex = cex, col = col)
plot(preds$tempave.sc, resids, cex = cex, col = col)
plot(preds$microclim.sc, resids, cex = cex, col = col)
plot(preds$npp.sc, resids, cex = cex, col = col)
plot(preds$speed.sc, resids, cex = cex, col = col)
plot(preds$mass.sc, resids, cex = cex, col = col)
plot(preds$consumerfrac.sc, resids, cex = cex, col = col)
plot(preds$thermal_bias.sc, resids, cex = cex, col = col)

Sensitivity analysis: total turnover and Morisita-Horn models

i2 <- trends[, complete.cases(Jbetatrend, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend.sc, temptrend_abs.sc, mass.sc, speed.sc, lifespan.sc, 
                             consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, human.sc)]
i3 <- trends[, complete.cases(Horntrend, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend.sc, temptrend_abs.sc, mass.sc, speed.sc, lifespan.sc, 
                             consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, human.sc)]

randef <- list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

# full models
if(file.exists('temp/modTfullJbeta.rds')){
  modTfullJbeta <- readRDS('temp/modTfullJbeta.rds')
} else {
  modTfullJbeta <- lme(Jbetatrend ~ temptrend_abs.sc*REALM + 
                     temptrend_abs.sc*tempave.sc +
                     temptrend_abs.sc*tempave_metab.sc + 
                     temptrend_abs.sc*seas.sc + 
                     temptrend_abs.sc*microclim.sc + 
                     temptrend_abs.sc*mass.sc + 
                     temptrend_abs.sc*speed.sc + 
                     temptrend_abs.sc*lifespan.sc + 
                     temptrend_abs.sc*consumerfrac.sc +
                     temptrend_abs.sc*endothermfrac.sc +
                     temptrend_abs.sc*nspp.sc +
                     temptrend.sc*thermal_bias.sc +
                     temptrend_abs.sc*npp.sc +
                     temptrend_abs.sc*human.sc*REALM,
                   random = randef, weights = varef, data = trends[i2,], method = 'REML')
  saveRDS(modTfullJbeta, file = 'temp/modTfullJbeta.rds')
}

if(file.exists('temp/modTfullHorn.rds')){
  modTfullHorn <- readRDS('temp/modTfullHorn.rds')
} else {
  modTfullHorn <- lme(Horntrend ~ temptrend_abs.sc*REALM + 
                     temptrend_abs.sc*tempave.sc +
                     temptrend_abs.sc*tempave_metab.sc + 
                     temptrend_abs.sc*seas.sc + 
                     temptrend_abs.sc*microclim.sc + 
                     temptrend_abs.sc*mass.sc + 
                     temptrend_abs.sc*speed.sc + 
                     temptrend_abs.sc*lifespan.sc + 
                     temptrend_abs.sc*consumerfrac.sc +
                     temptrend_abs.sc*endothermfrac.sc +
                     temptrend_abs.sc*nspp.sc +
                     temptrend.sc*thermal_bias.sc +
                     temptrend_abs.sc*npp.sc +
                     temptrend_abs.sc*human.sc*REALM,
                   random = randef, weights = varef, data = trends[i3,], method = 'REML')
  saveRDS(modTfullHorn, file = 'temp/modTfullHorn.rds')
}

summary(modTfullJbeta)
Linear mixed-effects model fit by REML
 Data: trends[i2, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.06574154 (Intr)
temptrend_abs.sc 0.02529340 0.519 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.002266703 0.3555714

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.375398 
Fixed effects: Jbetatrend ~ temptrend_abs.sc * REALM + temptrend_abs.sc * tempave.sc +      temptrend_abs.sc * tempave_metab.sc + temptrend_abs.sc *      seas.sc + temptrend_abs.sc * microclim.sc + temptrend_abs.sc *      mass.sc + temptrend_abs.sc * speed.sc + temptrend_abs.sc *      lifespan.sc + temptrend_abs.sc * consumerfrac.sc + temptrend_abs.sc *      endothermfrac.sc + temptrend_abs.sc * nspp.sc + temptrend.sc *      thermal_bias.sc + temptrend_abs.sc * npp.sc + temptrend_abs.sc *      human.sc * REALM 
 Correlation: 
                                           (Intr) tmpt_. REALMMr REALMTr tmpv.s tmpv_. ses.sc mcrcl. mss.sc spd.sc lfspn. cnsmr. endth. nspp.s
temptrend_abs.sc                            0.344                                                                                             
REALMMarine                                -0.918 -0.315                                                                                      
REALMTerrestrial                           -0.886 -0.314  0.812                                                                               
tempave.sc                                 -0.002 -0.006 -0.009  -0.006                                                                       
tempave_metab.sc                            0.042  0.013 -0.032  -0.036  -0.264                                                               
seas.sc                                    -0.026 -0.002  0.038  -0.002   0.282 -0.083                                                        
microclim.sc                               -0.004  0.002  0.010  -0.007   0.062  0.066  0.188                                                 
mass.sc                                     0.018  0.002 -0.005  -0.003   0.000 -0.550 -0.041 -0.013                                          
speed.sc                                    0.016  0.006 -0.025  -0.022  -0.005  0.180 -0.080 -0.037 -0.138                                   
lifespan.sc                                 0.027  0.016 -0.017  -0.033  -0.036  0.757  0.095  0.049 -0.801  0.280                            
consumerfrac.sc                            -0.050 -0.051  0.062   0.323  -0.034 -0.067  0.003  0.013  0.053 -0.123 -0.103                     
endothermfrac.sc                            0.157  0.075 -0.079  -0.320   0.057 -0.125  0.044  0.004  0.023  0.061 -0.012 -0.427              
nspp.sc                                    -0.020  0.001  0.000  -0.009  -0.048 -0.034 -0.026 -0.059 -0.150 -0.048  0.085  0.006  0.043       
temptrend.sc                               -0.004 -0.008  0.005   0.007  -0.065 -0.019 -0.048 -0.017  0.015 -0.011 -0.012  0.012  0.003  0.020
thermal_bias.sc                             0.022 -0.006 -0.033  -0.008   0.757 -0.033 -0.152 -0.127  0.038  0.018 -0.065 -0.006 -0.003 -0.112
npp.sc                                      0.003  0.001 -0.007  -0.007  -0.322  0.246 -0.265 -0.223 -0.013 -0.023  0.063 -0.059 -0.080 -0.165
human.sc                                   -0.131 -0.012  0.123   0.116   0.020 -0.009  0.013  0.017  0.003  0.001  0.005  0.010  0.001 -0.009
temptrend_abs.sc:REALMMarine               -0.327 -0.953  0.347   0.299   0.006 -0.008  0.010  0.000  0.004 -0.010 -0.012  0.054 -0.049 -0.007
temptrend_abs.sc:REALMTerrestrial          -0.307 -0.878  0.282   0.346  -0.004 -0.014 -0.015 -0.009  0.007 -0.007 -0.017  0.134 -0.132 -0.013
temptrend_abs.sc:tempave.sc                -0.001 -0.006 -0.001  -0.003   0.108 -0.063  0.050 -0.026 -0.033 -0.030  0.003 -0.011  0.017 -0.003
temptrend_abs.sc:tempave_metab.sc           0.008  0.027 -0.005  -0.004   0.031  0.353  0.014  0.086 -0.218  0.088  0.319 -0.022 -0.053 -0.028
temptrend_abs.sc:seas.sc                    0.010 -0.024 -0.005  -0.014   0.158  0.026  0.232  0.025 -0.036 -0.029  0.041  0.028  0.007 -0.010
temptrend_abs.sc:microclim.sc              -0.002 -0.023  0.000  -0.001   0.010  0.101  0.054  0.277 -0.029  0.009  0.018  0.003 -0.028 -0.001
temptrend_abs.sc:mass.sc                    0.001  0.004  0.004   0.006  -0.013 -0.290 -0.034 -0.020  0.496 -0.054 -0.409  0.034  0.007 -0.060
temptrend_abs.sc:speed.sc                   0.000 -0.002 -0.001  -0.005  -0.006  0.038 -0.029  0.004 -0.023  0.222  0.070 -0.036  0.024 -0.025
temptrend_abs.sc:lifespan.sc                0.007  0.031 -0.004  -0.008  -0.002  0.409  0.050  0.025 -0.409  0.122  0.510 -0.047 -0.038  0.038
temptrend_abs.sc:consumerfrac.sc           -0.049 -0.055  0.047   0.121  -0.007 -0.057 -0.003 -0.003  0.030 -0.053 -0.067  0.251 -0.134  0.005
                                           tmptr. thrm_. npp.sc hmn.sc tm_.:REALMM tm_.:REALMT tmptrnd_bs.sc:t. t_.:_. tmptrnd_bs.sc:ss.
temptrend_abs.sc                                                                                                                        
REALMMarine                                                                                                                             
REALMTerrestrial                                                                                                                        
tempave.sc                                                                                                                              
tempave_metab.sc                                                                                                                        
seas.sc                                                                                                                                 
microclim.sc                                                                                                                            
mass.sc                                                                                                                                 
speed.sc                                                                                                                                
lifespan.sc                                                                                                                             
consumerfrac.sc                                                                                                                         
endothermfrac.sc                                                                                                                        
nspp.sc                                                                                                                                 
temptrend.sc                                                                                                                            
thermal_bias.sc                            -0.001                                                                                       
npp.sc                                     -0.015 -0.135                                                                                
human.sc                                    0.009  0.015 -0.034                                                                         
temptrend_abs.sc:REALMMarine                0.006  0.005 -0.007  0.012                                                                  
temptrend_abs.sc:REALMTerrestrial           0.008  0.002  0.008  0.010  0.833                                                           
temptrend_abs.sc:tempave.sc                -0.077  0.008 -0.033 -0.003  0.005       0.002                                               
temptrend_abs.sc:tempave_metab.sc           0.002  0.098  0.030 -0.001 -0.020      -0.024      -0.649                                   
temptrend_abs.sc:seas.sc                   -0.033  0.101 -0.180  0.000  0.044      -0.035       0.245           -0.011                  
temptrend_abs.sc:microclim.sc               0.001 -0.022 -0.126  0.001  0.032      -0.003      -0.024           -0.001  0.059           
temptrend_abs.sc:mass.sc                    0.019  0.015  0.005  0.011  0.009       0.014      -0.053           -0.407 -0.027           
temptrend_abs.sc:speed.sc                  -0.004  0.012  0.012  0.011 -0.020      -0.005      -0.044            0.090 -0.046           
temptrend_abs.sc:lifespan.sc               -0.016 -0.014  0.021 -0.005 -0.025      -0.031      -0.007            0.628  0.053           
temptrend_abs.sc:consumerfrac.sc            0.008 -0.005 -0.019 -0.007  0.072       0.258       0.013           -0.090 -0.017           
                                           tmptrnd_bs.sc:mc. tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:l. tmptrnd_bs.sc:c. tmptrnd_bs.sc:nd.
temptrend_abs.sc                                                                                                                                    
REALMMarine                                                                                                                                         
REALMTerrestrial                                                                                                                                    
tempave.sc                                                                                                                                          
tempave_metab.sc                                                                                                                                    
seas.sc                                                                                                                                             
microclim.sc                                                                                                                                        
mass.sc                                                                                                                                             
speed.sc                                                                                                                                            
lifespan.sc                                                                                                                                         
consumerfrac.sc                                                                                                                                     
endothermfrac.sc                                                                                                                                    
nspp.sc                                                                                                                                             
temptrend.sc                                                                                                                                        
thermal_bias.sc                                                                                                                                     
npp.sc                                                                                                                                              
human.sc                                                                                                                                            
temptrend_abs.sc:REALMMarine                                                                                                                        
temptrend_abs.sc:REALMTerrestrial                                                                                                                   
temptrend_abs.sc:tempave.sc                                                                                                                         
temptrend_abs.sc:tempave_metab.sc                                                                                                                   
temptrend_abs.sc:seas.sc                                                                                                                            
temptrend_abs.sc:microclim.sc                                                                                                                       
temptrend_abs.sc:mass.sc                    0.015                                                                                                   
temptrend_abs.sc:speed.sc                  -0.047            -0.055                                                                                 
temptrend_abs.sc:lifespan.sc                0.016            -0.790             0.150                                                               
temptrend_abs.sc:consumerfrac.sc            0.010             0.041            -0.188            -0.120                                             
                                           tmptrnd_bs.sc:ns. tm.:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:h. REALMM: REALMT: t_.:REALMM:
temptrend_abs.sc                                                                                                                  
REALMMarine                                                                                                                       
REALMTerrestrial                                                                                                                  
tempave.sc                                                                                                                        
tempave_metab.sc                                                                                                                  
seas.sc                                                                                                                           
microclim.sc                                                                                                                      
mass.sc                                                                                                                           
speed.sc                                                                                                                          
lifespan.sc                                                                                                                       
consumerfrac.sc                                                                                                                   
endothermfrac.sc                                                                                                                  
nspp.sc                                                                                                                           
temptrend.sc                                                                                                                      
thermal_bias.sc                                                                                                                   
npp.sc                                                                                                                            
human.sc                                                                                                                          
temptrend_abs.sc:REALMMarine                                                                                                      
temptrend_abs.sc:REALMTerrestrial                                                                                                 
temptrend_abs.sc:tempave.sc                                                                                                       
temptrend_abs.sc:tempave_metab.sc                                                                                                 
temptrend_abs.sc:seas.sc                                                                                                          
temptrend_abs.sc:microclim.sc                                                                                                     
temptrend_abs.sc:mass.sc                                                                                                          
temptrend_abs.sc:speed.sc                                                                                                         
temptrend_abs.sc:lifespan.sc                                                                                                      
temptrend_abs.sc:consumerfrac.sc                                                                                                  
 [ reached getOption("max.print") -- omitted 9 rows ]

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-6.8341663 -0.2345669  0.1396972  0.6505144  7.5323730 

Number of Observations: 43585
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   250                  43585 
summary(modTfullHorn)
Linear mixed-effects model fit by REML
 Data: trends[i3, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.06615737 (Intr)
temptrend_abs.sc 0.02037063 0.557 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev:  0.00442701 0.3182813

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.239152 
Fixed effects: Horntrend ~ temptrend_abs.sc * REALM + temptrend_abs.sc * tempave.sc +      temptrend_abs.sc * tempave_metab.sc + temptrend_abs.sc *      seas.sc + temptrend_abs.sc * microclim.sc + temptrend_abs.sc *      mass.sc + temptrend_abs.sc * speed.sc + temptrend_abs.sc *      lifespan.sc + temptrend_abs.sc * consumerfrac.sc + temptrend_abs.sc *      endothermfrac.sc + temptrend_abs.sc * nspp.sc + temptrend.sc *      thermal_bias.sc + temptrend_abs.sc * npp.sc + temptrend_abs.sc *      human.sc * REALM 
 Correlation: 
                                           (Intr) tmpt_. REALMMr REALMTr tmpv.s tmpv_. ses.sc mcrcl. mss.sc spd.sc lfspn. cnsmr. endth. nspp.s
temptrend_abs.sc                            0.336                                                                                             
REALMMarine                                -0.905 -0.302                                                                                      
REALMTerrestrial                           -0.876 -0.303  0.786                                                                               
tempave.sc                                 -0.002 -0.005 -0.008  -0.003                                                                       
tempave_metab.sc                            0.050  0.014 -0.037  -0.047  -0.337                                                               
seas.sc                                    -0.039 -0.003  0.051   0.003   0.258 -0.087                                                        
microclim.sc                               -0.007  0.005  0.012  -0.008   0.027  0.057  0.138                                                 
mass.sc                                     0.017 -0.001 -0.004   0.002  -0.010 -0.525 -0.046 -0.009                                          
speed.sc                                    0.017  0.005 -0.030  -0.026  -0.017  0.165 -0.089 -0.041 -0.133                                   
lifespan.sc                                 0.034  0.021 -0.021  -0.040  -0.035  0.730  0.092  0.037 -0.802  0.256                            
consumerfrac.sc                            -0.051 -0.051  0.046   0.335  -0.014 -0.066 -0.003  0.010  0.052 -0.129 -0.101                     
endothermfrac.sc                            0.163  0.075 -0.079  -0.340   0.100 -0.159  0.042  0.000  0.013  0.065 -0.012 -0.421              
nspp.sc                                    -0.023 -0.001  0.000  -0.008  -0.044 -0.021 -0.028 -0.044 -0.163 -0.043  0.100  0.010  0.049       
temptrend.sc                               -0.004 -0.007  0.005   0.008  -0.060 -0.016 -0.043 -0.013  0.016 -0.008 -0.012  0.010  0.001  0.018
thermal_bias.sc                             0.029 -0.004 -0.039  -0.013   0.726 -0.049 -0.151 -0.144  0.037  0.016 -0.067  0.007  0.006 -0.107
npp.sc                                      0.007 -0.002 -0.008  -0.007  -0.313  0.241 -0.273 -0.259 -0.010 -0.006  0.056 -0.040 -0.077 -0.154
human.sc                                   -0.144  0.005  0.134   0.127   0.019 -0.009  0.014  0.022  0.005  0.000  0.006  0.013  0.000 -0.012
temptrend_abs.sc:REALMMarine               -0.316 -0.951  0.339   0.285   0.004 -0.007  0.010 -0.003  0.006 -0.008 -0.014  0.052 -0.050 -0.005
temptrend_abs.sc:REALMTerrestrial          -0.297 -0.869  0.268   0.338  -0.006 -0.021 -0.018 -0.014  0.014 -0.007 -0.023  0.123 -0.125 -0.012
temptrend_abs.sc:tempave.sc                 0.001  0.002 -0.003  -0.001   0.087 -0.056  0.006 -0.035 -0.038 -0.029  0.004 -0.005  0.024 -0.007
temptrend_abs.sc:tempave_metab.sc           0.007  0.026 -0.001  -0.008   0.036  0.301  0.030  0.087 -0.190  0.063  0.281 -0.023 -0.054 -0.023
temptrend_abs.sc:seas.sc                    0.013 -0.019 -0.011  -0.020   0.117  0.031  0.181  0.007 -0.032 -0.024  0.037  0.014 -0.007 -0.015
temptrend_abs.sc:microclim.sc              -0.003 -0.033  0.001  -0.003  -0.007  0.098  0.043  0.248 -0.026  0.017  0.012 -0.002 -0.032  0.016
temptrend_abs.sc:mass.sc                   -0.001 -0.005  0.006   0.009  -0.025 -0.249 -0.036 -0.018  0.443 -0.034 -0.368  0.028  0.002 -0.051
temptrend_abs.sc:speed.sc                  -0.002 -0.006  0.003  -0.003  -0.008  0.019 -0.019  0.010 -0.006  0.120  0.036 -0.026  0.018 -0.022
temptrend_abs.sc:lifespan.sc                0.008  0.037  0.000  -0.009   0.006  0.350  0.046  0.016 -0.368  0.078  0.456 -0.043 -0.034  0.036
temptrend_abs.sc:consumerfrac.sc           -0.046 -0.059  0.048   0.104  -0.006 -0.057 -0.013 -0.006  0.035 -0.034 -0.069  0.225 -0.103  0.005
                                           tmptr. thrm_. npp.sc hmn.sc tm_.:REALMM tm_.:REALMT tmptrnd_bs.sc:t. t_.:_. tmptrnd_bs.sc:ss.
temptrend_abs.sc                                                                                                                        
REALMMarine                                                                                                                             
REALMTerrestrial                                                                                                                        
tempave.sc                                                                                                                              
tempave_metab.sc                                                                                                                        
seas.sc                                                                                                                                 
microclim.sc                                                                                                                            
mass.sc                                                                                                                                 
speed.sc                                                                                                                                
lifespan.sc                                                                                                                             
consumerfrac.sc                                                                                                                         
endothermfrac.sc                                                                                                                        
nspp.sc                                                                                                                                 
temptrend.sc                                                                                                                            
thermal_bias.sc                            -0.005                                                                                       
npp.sc                                     -0.016 -0.130                                                                                
human.sc                                    0.009  0.014 -0.038                                                                         
temptrend_abs.sc:REALMMarine                0.005  0.003 -0.005 -0.005                                                                  
temptrend_abs.sc:REALMTerrestrial           0.009 -0.003  0.013 -0.004  0.820                                                           
temptrend_abs.sc:tempave.sc                -0.068  0.028 -0.014 -0.003 -0.005       0.004                                               
temptrend_abs.sc:tempave_metab.sc           0.000  0.084  0.012  0.002 -0.015      -0.032      -0.660                                   
temptrend_abs.sc:seas.sc                   -0.025  0.091 -0.158 -0.003  0.044      -0.075       0.135            0.055                  
temptrend_abs.sc:microclim.sc               0.009 -0.034 -0.134  0.000  0.042      -0.002      -0.061            0.014  0.037           
temptrend_abs.sc:mass.sc                    0.021  0.007  0.009  0.008  0.016       0.032      -0.064           -0.408 -0.024           
temptrend_abs.sc:speed.sc                  -0.005  0.009  0.016  0.011 -0.026      -0.005      -0.046            0.092 -0.039           
temptrend_abs.sc:lifespan.sc               -0.016 -0.008  0.012 -0.001 -0.031      -0.038      -0.006            0.620  0.051           
temptrend_abs.sc:consumerfrac.sc            0.010 -0.003 -0.007 -0.009  0.064       0.275       0.024           -0.107 -0.060           
                                           tmptrnd_bs.sc:mc. tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:l. tmptrnd_bs.sc:c. tmptrnd_bs.sc:nd.
temptrend_abs.sc                                                                                                                                    
REALMMarine                                                                                                                                         
REALMTerrestrial                                                                                                                                    
tempave.sc                                                                                                                                          
tempave_metab.sc                                                                                                                                    
seas.sc                                                                                                                                             
microclim.sc                                                                                                                                        
mass.sc                                                                                                                                             
speed.sc                                                                                                                                            
lifespan.sc                                                                                                                                         
consumerfrac.sc                                                                                                                                     
endothermfrac.sc                                                                                                                                    
nspp.sc                                                                                                                                             
temptrend.sc                                                                                                                                        
thermal_bias.sc                                                                                                                                     
npp.sc                                                                                                                                              
human.sc                                                                                                                                            
temptrend_abs.sc:REALMMarine                                                                                                                        
temptrend_abs.sc:REALMTerrestrial                                                                                                                   
temptrend_abs.sc:tempave.sc                                                                                                                         
temptrend_abs.sc:tempave_metab.sc                                                                                                                   
temptrend_abs.sc:seas.sc                                                                                                                            
temptrend_abs.sc:microclim.sc                                                                                                                       
temptrend_abs.sc:mass.sc                    0.016                                                                                                   
temptrend_abs.sc:speed.sc                  -0.043            -0.059                                                                                 
temptrend_abs.sc:lifespan.sc                0.011            -0.804             0.148                                                               
temptrend_abs.sc:consumerfrac.sc            0.011             0.068            -0.205            -0.136                                             
                                           tmptrnd_bs.sc:ns. tm.:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:h. REALMM: REALMT: t_.:REALMM:
temptrend_abs.sc                                                                                                                  
REALMMarine                                                                                                                       
REALMTerrestrial                                                                                                                  
tempave.sc                                                                                                                        
tempave_metab.sc                                                                                                                  
seas.sc                                                                                                                           
microclim.sc                                                                                                                      
mass.sc                                                                                                                           
speed.sc                                                                                                                          
lifespan.sc                                                                                                                       
consumerfrac.sc                                                                                                                   
endothermfrac.sc                                                                                                                  
nspp.sc                                                                                                                           
temptrend.sc                                                                                                                      
thermal_bias.sc                                                                                                                   
npp.sc                                                                                                                            
human.sc                                                                                                                          
temptrend_abs.sc:REALMMarine                                                                                                      
temptrend_abs.sc:REALMTerrestrial                                                                                                 
temptrend_abs.sc:tempave.sc                                                                                                       
temptrend_abs.sc:tempave_metab.sc                                                                                                 
temptrend_abs.sc:seas.sc                                                                                                          
temptrend_abs.sc:microclim.sc                                                                                                     
temptrend_abs.sc:mass.sc                                                                                                          
temptrend_abs.sc:speed.sc                                                                                                         
temptrend_abs.sc:lifespan.sc                                                                                                      
temptrend_abs.sc:consumerfrac.sc                                                                                                  
 [ reached getOption("max.print") -- omitted 9 rows ]

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-5.78006527 -0.36573591  0.04098243  0.55898457  6.73978237 

Number of Observations: 42586
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   218                  42586 
# simplify
if(file.exists('temp/modTfullJbetasimp.rds')){
  modTfullJbetasimp <- readRDS('temp/modTfullJbetasimp.rds')
} else {
  require(MASS) # for stepAIC
  modTfullJbetaml <- update(modTfullJbeta, method = 'ML')
  modTfullJbetasimp <- stepAIC(modTfullJbetaml, direction = 'backward')
  saveRDS(modTfullJbetasimp, file = 'temp/modTfullJbetasimp.rds')
}

if(file.exists('temp/modTfullHornsimp.rds')){
  modTfullHornsimp <- readRDS('temp/modTfullHornsimp.rds')
} else {
  require(MASS) # for stepAIC
  modTfullHornml <- update(modTfullHorn, method = 'ML')
  modTfullHornsimp <- stepAIC(modTfullHornml, direction = 'backward')
  saveRDS(modTfullHornsimp, file = 'temp/modTfullHornsimp.rds')
}

summary(modTfullJbetasimp)
Linear mixed-effects model fit by maximum likelihood
 Data: trends[i2, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.06485034 (Intr)
temptrend_abs.sc 0.02424001 0.542 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.002184697 0.3556416

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.375443 
Fixed effects: Jbetatrend ~ temptrend_abs.sc + REALM + tempave.sc + tempave_metab.sc +      seas.sc + microclim.sc + mass.sc + speed.sc + lifespan.sc +      consumerfrac.sc + endothermfrac.sc + nspp.sc + temptrend.sc +      thermal_bias.sc + npp.sc + human.sc + temptrend_abs.sc:REALM +      temptrend_abs.sc:tempave.sc + temptrend_abs.sc:tempave_metab.sc +      temptrend_abs.sc:seas.sc + temptrend_abs.sc:microclim.sc +      temptrend_abs.sc:mass.sc + temptrend_abs.sc:speed.sc + temptrend_abs.sc:lifespan.sc +      temptrend_abs.sc:endothermfrac.sc + temptrend_abs.sc:nspp.sc +      temptrend.sc:thermal_bias.sc + temptrend_abs.sc:npp.sc +      temptrend_abs.sc:human.sc + REALM:human.sc + temptrend_abs.sc:REALM:human.sc 
 Correlation: 
                                           (Intr) tmpt_. REALMMr REALMTr tmpv.s tmpv_. ses.sc mcrcl. mss.sc spd.sc lfspn. cnsmr. endth. nspp.s
temptrend_abs.sc                            0.356                                                                                             
REALMMarine                                -0.917 -0.326                                                                                      
REALMTerrestrial                           -0.887 -0.321  0.813                                                                               
tempave.sc                                 -0.002 -0.007 -0.009  -0.005                                                                       
tempave_metab.sc                            0.039  0.011 -0.030  -0.029  -0.262                                                               
seas.sc                                    -0.027 -0.003  0.039  -0.002   0.282 -0.083                                                        
microclim.sc                               -0.004  0.002  0.010  -0.007   0.063  0.067  0.189                                                 
mass.sc                                     0.019  0.004 -0.006  -0.007   0.001 -0.550 -0.041 -0.013                                          
speed.sc                                    0.013  0.003 -0.023  -0.016  -0.004  0.178 -0.080 -0.037 -0.137                                   
lifespan.sc                                 0.024  0.013 -0.014  -0.026  -0.037  0.757  0.095  0.049 -0.801  0.278                            
consumerfrac.sc                            -0.039 -0.038  0.052   0.304  -0.032 -0.055  0.005  0.014  0.047 -0.115 -0.090                     
endothermfrac.sc                            0.153  0.070 -0.074  -0.310   0.056 -0.135  0.044  0.004  0.027  0.055 -0.022 -0.411              
nspp.sc                                    -0.020  0.001 -0.001  -0.010  -0.048 -0.034 -0.026 -0.060 -0.150 -0.048  0.086  0.005  0.045       
temptrend.sc                               -0.004 -0.007  0.004   0.006  -0.065 -0.019 -0.048 -0.017  0.015 -0.010 -0.012  0.010  0.004  0.020
thermal_bias.sc                             0.022 -0.006 -0.033  -0.008   0.759 -0.033 -0.152 -0.126  0.038  0.018 -0.066 -0.005 -0.004 -0.112
npp.sc                                      0.002 -0.001 -0.006  -0.004  -0.322  0.245 -0.264 -0.222 -0.012 -0.025  0.062 -0.056 -0.084 -0.166
human.sc                                   -0.133 -0.011  0.125   0.119   0.019 -0.009  0.013  0.017  0.003  0.001  0.005  0.012  0.000 -0.009
temptrend_abs.sc:REALMMarine               -0.337 -0.953  0.358   0.303   0.006 -0.004  0.011  0.000  0.002 -0.006 -0.008  0.037 -0.040 -0.008
temptrend_abs.sc:REALMTerrestrial          -0.317 -0.895  0.289   0.341  -0.003  0.001 -0.015 -0.009 -0.001  0.007  0.000  0.074 -0.104 -0.016
temptrend_abs.sc:tempave.sc                 0.000 -0.005 -0.002  -0.005   0.108 -0.063  0.051 -0.025 -0.033 -0.030  0.004 -0.015  0.019 -0.003
temptrend_abs.sc:tempave_metab.sc           0.004  0.022  0.000   0.008   0.031  0.350  0.013  0.086 -0.217  0.084  0.316  0.001 -0.067 -0.028
temptrend_abs.sc:seas.sc                    0.009 -0.025 -0.005  -0.012   0.159  0.025  0.234  0.026 -0.035 -0.031  0.040  0.034  0.005 -0.009
temptrend_abs.sc:microclim.sc              -0.002 -0.023  0.000  -0.002   0.011  0.101  0.055  0.278 -0.029  0.009  0.019  0.001 -0.027 -0.001
temptrend_abs.sc:mass.sc                    0.003  0.005  0.002   0.001  -0.012 -0.289 -0.034 -0.021  0.496 -0.052 -0.408  0.024  0.013 -0.060
temptrend_abs.sc:speed.sc                  -0.009 -0.014  0.008   0.019  -0.008  0.027 -0.030  0.004 -0.017  0.217  0.059  0.015 -0.002 -0.025
temptrend_abs.sc:lifespan.sc                0.002  0.024  0.002   0.008  -0.003  0.406  0.050  0.025 -0.409  0.117  0.507 -0.016 -0.056  0.039
temptrend_abs.sc:endothermfrac.sc           0.053  0.134 -0.024  -0.091  -0.031 -0.095 -0.003 -0.039  0.012 -0.006 -0.048 -0.090  0.359  0.047
temptrend_abs.sc:nspp.sc                    0.000  0.031 -0.005  -0.011  -0.037 -0.012  0.004  0.003 -0.067  0.000  0.056 -0.008  0.020  0.334
                                           tmptr. thrm_. npp.sc hmn.sc tm_.:REALMM tm_.:REALMT tmptrnd_bs.sc:t. t_.:_. tmptrnd_bs.sc:ss.
temptrend_abs.sc                                                                                                                        
REALMMarine                                                                                                                             
REALMTerrestrial                                                                                                                        
tempave.sc                                                                                                                              
tempave_metab.sc                                                                                                                        
seas.sc                                                                                                                                 
microclim.sc                                                                                                                            
mass.sc                                                                                                                                 
speed.sc                                                                                                                                
lifespan.sc                                                                                                                             
consumerfrac.sc                                                                                                                         
endothermfrac.sc                                                                                                                        
nspp.sc                                                                                                                                 
temptrend.sc                                                                                                                            
thermal_bias.sc                            -0.001                                                                                       
npp.sc                                     -0.014 -0.135                                                                                
human.sc                                    0.009  0.015 -0.034                                                                         
temptrend_abs.sc:REALMMarine                0.005  0.005 -0.005  0.011                                                                  
temptrend_abs.sc:REALMTerrestrial           0.006  0.003  0.014  0.011  0.845                                                           
temptrend_abs.sc:tempave.sc                -0.077  0.008 -0.034 -0.003  0.004      -0.002                                               
temptrend_abs.sc:tempave_metab.sc           0.002  0.098  0.029 -0.001 -0.013       0.000      -0.649                                   
temptrend_abs.sc:seas.sc                   -0.033  0.101 -0.181 -0.001  0.045      -0.034       0.248           -0.014                  
temptrend_abs.sc:microclim.sc               0.000 -0.022 -0.126  0.001  0.033      -0.005      -0.023            0.000  0.060           
temptrend_abs.sc:mass.sc                    0.019  0.016  0.006  0.011  0.006       0.004      -0.054           -0.407 -0.027           
temptrend_abs.sc:speed.sc                  -0.003  0.011  0.008  0.011 -0.007       0.048      -0.042            0.074 -0.050           
temptrend_abs.sc:lifespan.sc               -0.015 -0.015  0.019 -0.006 -0.017       0.000      -0.005            0.624  0.052           
temptrend_abs.sc:endothermfrac.sc          -0.008 -0.066 -0.022 -0.002 -0.082      -0.242       0.401           -0.430  0.014           
temptrend_abs.sc:nspp.sc                    0.022 -0.069 -0.028 -0.013 -0.048      -0.063       0.044           -0.020 -0.046           
                                           tmptrnd_bs.sc:mc. tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:l. tmptrnd_bs.sc:nd.
temptrend_abs.sc                                                                                                                   
REALMMarine                                                                                                                        
REALMTerrestrial                                                                                                                   
tempave.sc                                                                                                                         
tempave_metab.sc                                                                                                                   
seas.sc                                                                                                                            
microclim.sc                                                                                                                       
mass.sc                                                                                                                            
speed.sc                                                                                                                           
lifespan.sc                                                                                                                        
consumerfrac.sc                                                                                                                    
endothermfrac.sc                                                                                                                   
nspp.sc                                                                                                                            
temptrend.sc                                                                                                                       
thermal_bias.sc                                                                                                                    
npp.sc                                                                                                                             
human.sc                                                                                                                           
temptrend_abs.sc:REALMMarine                                                                                                       
temptrend_abs.sc:REALMTerrestrial                                                                                                  
temptrend_abs.sc:tempave.sc                                                                                                        
temptrend_abs.sc:tempave_metab.sc                                                                                                  
temptrend_abs.sc:seas.sc                                                                                                           
temptrend_abs.sc:microclim.sc                                                                                                      
temptrend_abs.sc:mass.sc                    0.015                                                                                  
temptrend_abs.sc:speed.sc                  -0.046            -0.048                                                                
temptrend_abs.sc:lifespan.sc                0.017            -0.792             0.130                                              
temptrend_abs.sc:endothermfrac.sc           0.003            -0.010             0.076            -0.073                            
temptrend_abs.sc:nspp.sc                   -0.177            -0.208            -0.145             0.177            0.108           
                                           tmptrnd_bs.sc:ns. tm.:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:h. REALMM: REALMT: t_.:REALMM:
temptrend_abs.sc                                                                                                                  
REALMMarine                                                                                                                       
REALMTerrestrial                                                                                                                  
tempave.sc                                                                                                                        
tempave_metab.sc                                                                                                                  
seas.sc                                                                                                                           
microclim.sc                                                                                                                      
mass.sc                                                                                                                           
speed.sc                                                                                                                          
lifespan.sc                                                                                                                       
consumerfrac.sc                                                                                                                   
endothermfrac.sc                                                                                                                  
nspp.sc                                                                                                                           
temptrend.sc                                                                                                                      
thermal_bias.sc                                                                                                                   
npp.sc                                                                                                                            
human.sc                                                                                                                          
temptrend_abs.sc:REALMMarine                                                                                                      
temptrend_abs.sc:REALMTerrestrial                                                                                                 
temptrend_abs.sc:tempave.sc                                                                                                       
temptrend_abs.sc:tempave_metab.sc                                                                                                 
temptrend_abs.sc:seas.sc                                                                                                          
temptrend_abs.sc:microclim.sc                                                                                                     
temptrend_abs.sc:mass.sc                                                                                                          
temptrend_abs.sc:speed.sc                                                                                                         
temptrend_abs.sc:lifespan.sc                                                                                                      
temptrend_abs.sc:endothermfrac.sc                                                                                                 
temptrend_abs.sc:nspp.sc                                                                                                          
 [ reached getOption("max.print") -- omitted 7 rows ]

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-6.8573436 -0.2341121  0.1401190  0.6510143  7.5263164 

Number of Observations: 43585
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   250                  43585 
summary(modTfullHornsimp)
Linear mixed-effects model fit by maximum likelihood
 Data: trends[i3, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.06476501 (Intr)
temptrend_abs.sc 0.01910837 0.582 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.004350937 0.3182529

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.238924 
Fixed effects: Horntrend ~ temptrend_abs.sc + REALM + tempave.sc + tempave_metab.sc +      seas.sc + microclim.sc + mass.sc + lifespan.sc + endothermfrac.sc +      nspp.sc + npp.sc + human.sc + temptrend_abs.sc:tempave.sc +      temptrend_abs.sc:tempave_metab.sc + temptrend_abs.sc:seas.sc +      temptrend_abs.sc:mass.sc + temptrend_abs.sc:lifespan.sc +      temptrend_abs.sc:endothermfrac.sc + temptrend_abs.sc:nspp.sc +      temptrend_abs.sc:npp.sc + temptrend_abs.sc:human.sc + REALM:human.sc 
 Correlation: 
                                  (Intr) tmpt_. REALMMr REALMTr tmpv.s tmpv_. ses.sc mcrcl. mss.sc lfspn. endth. nspp.s npp.sc hmn.sc
temptrend_abs.sc                   0.115                                                                                             
REALMMarine                       -0.895  0.059                                                                                      
REALMTerrestrial                  -0.906 -0.043  0.815                                                                               
tempave.sc                        -0.038 -0.010  0.032   0.022                                                                       
tempave_metab.sc                   0.047  0.033 -0.030  -0.028  -0.453                                                               
seas.sc                           -0.036 -0.002  0.043   0.008   0.542 -0.089                                                        
microclim.sc                      -0.008  0.000  0.012  -0.008   0.197  0.037  0.110                                                 
mass.sc                            0.026  0.021 -0.012  -0.018  -0.057 -0.513 -0.051 -0.004                                          
lifespan.sc                        0.027  0.037 -0.008  -0.011   0.027  0.722  0.108  0.039 -0.802                                   
endothermfrac.sc                   0.150  0.049 -0.064  -0.225   0.147 -0.213  0.046  0.014  0.039 -0.065                            
nspp.sc                           -0.024 -0.035 -0.004  -0.009   0.049 -0.020 -0.051 -0.068 -0.168  0.109  0.061                     
npp.sc                             0.012 -0.002 -0.013   0.000  -0.328  0.258 -0.301 -0.261 -0.008  0.049 -0.108 -0.172              
human.sc                          -0.112 -0.023  0.102   0.100   0.014 -0.003  0.015  0.030  0.000  0.013  0.009 -0.010 -0.037       
temptrend_abs.sc:tempave.sc        0.001 -0.013 -0.003   0.000   0.093 -0.049  0.013 -0.016 -0.044  0.015  0.026  0.000 -0.013 -0.006
temptrend_abs.sc:tempave_metab.sc -0.007  0.056  0.016   0.009  -0.038  0.299  0.045  0.100 -0.188  0.280 -0.076 -0.012  0.022  0.013
temptrend_abs.sc:seas.sc           0.012 -0.035 -0.030  -0.007   0.071  0.035  0.188  0.009 -0.038  0.051 -0.023 -0.011 -0.145 -0.005
temptrend_abs.sc:mass.sc           0.014  0.043 -0.008  -0.013  -0.045 -0.247 -0.039 -0.021  0.444 -0.372  0.019 -0.054  0.013 -0.012
temptrend_abs.sc:lifespan.sc      -0.008  0.060  0.021   0.015   0.022  0.343  0.053  0.011 -0.366  0.454 -0.060  0.043  0.011  0.011
temptrend_abs.sc:endothermfrac.sc  0.004 -0.041 -0.005   0.005   0.023 -0.107 -0.043 -0.069  0.005 -0.055  0.304  0.043 -0.006  0.006
temptrend_abs.sc:nspp.sc          -0.030 -0.098  0.020   0.025   0.013  0.009 -0.014  0.057 -0.061  0.053  0.000  0.283 -0.036  0.003
temptrend_abs.sc:npp.sc            0.023 -0.049 -0.028  -0.015  -0.105  0.117 -0.145 -0.101  0.011  0.010 -0.054 -0.018  0.308 -0.007
temptrend_abs.sc:human.sc         -0.013  0.008  0.020   0.012   0.001 -0.019 -0.022 -0.042  0.009 -0.006  0.019 -0.029 -0.039  0.029
REALMMarine:human.sc               0.113  0.024 -0.103  -0.100  -0.020  0.003 -0.025 -0.037  0.001 -0.015 -0.009  0.008  0.024 -0.998
REALMTerrestrial:human.sc          0.112  0.023 -0.102  -0.100  -0.033  0.007 -0.031 -0.016  0.005 -0.019 -0.014  0.013  0.034 -0.997
                                  tmptrnd_bs.sc:t. t_.:_. tmptrnd_bs.sc:s. tmptrnd_bs.sc:m. tmptrnd_bs.sc:l. tmptrnd_bs.sc:nd. tmptrnd_bs.sc:ns.
temptrend_abs.sc                                                                                                                                
REALMMarine                                                                                                                                     
REALMTerrestrial                                                                                                                                
tempave.sc                                                                                                                                      
tempave_metab.sc                                                                                                                                
seas.sc                                                                                                                                         
microclim.sc                                                                                                                                    
mass.sc                                                                                                                                         
lifespan.sc                                                                                                                                     
endothermfrac.sc                                                                                                                                
nspp.sc                                                                                                                                         
npp.sc                                                                                                                                          
human.sc                                                                                                                                        
temptrend_abs.sc:tempave.sc                                                                                                                     
temptrend_abs.sc:tempave_metab.sc -0.667                                                                                                        
temptrend_abs.sc:seas.sc           0.150            0.043                                                                                       
temptrend_abs.sc:mass.sc          -0.065           -0.408 -0.023                                                                                
temptrend_abs.sc:lifespan.sc       0.001            0.616  0.060           -0.808                                                               
temptrend_abs.sc:endothermfrac.sc  0.551           -0.577 -0.083           -0.020           -0.099                                              
temptrend_abs.sc:nspp.sc           0.053           -0.004 -0.036           -0.221            0.217            0.128                             
temptrend_abs.sc:npp.sc           -0.163            0.145 -0.233           -0.023            0.051           -0.078            -0.258           
temptrend_abs.sc:human.sc         -0.176            0.100 -0.175            0.034           -0.033           -0.076            -0.093           
REALMMarine:human.sc               0.004           -0.012  0.002            0.013           -0.011           -0.006            -0.004           
REALMTerrestrial:human.sc          0.007           -0.015  0.001            0.014           -0.013           -0.005            -0.001           
                                  tmptrnd_bs.sc:np. tmptrnd_bs.sc:h. REALMM:
temptrend_abs.sc                                                            
REALMMarine                                                                 
REALMTerrestrial                                                            
tempave.sc                                                                  
tempave_metab.sc                                                            
seas.sc                                                                     
microclim.sc                                                                
mass.sc                                                                     
lifespan.sc                                                                 
endothermfrac.sc                                                            
nspp.sc                                                                     
npp.sc                                                                      
human.sc                                                                    
temptrend_abs.sc:tempave.sc                                                 
temptrend_abs.sc:tempave_metab.sc                                           
temptrend_abs.sc:seas.sc                                                    
temptrend_abs.sc:mass.sc                                                    
temptrend_abs.sc:lifespan.sc                                                
temptrend_abs.sc:endothermfrac.sc                                           
temptrend_abs.sc:nspp.sc                                                    
temptrend_abs.sc:npp.sc                                                     
temptrend_abs.sc:human.sc         -0.093                                    
REALMMarine:human.sc               0.002            -0.007                  
REALMTerrestrial:human.sc          0.008            -0.033            0.995 

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-5.77663334 -0.36634606  0.04052091  0.55819364  6.71061228 

Number of Observations: 42586
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   218                  42586 
if(file.exists('temp/modTfullJbetasimpreml.rds')){
  modTfullJbetasimpreml <- readRDS('temp/modTfullJbetasimpreml.rds')
} else {
  modTfullJbetasimpreml <- update(modTfullJbetasimp, method = 'REML')
  saveRDS(modTfullJbetasimpreml, file = 'temp/modTfullJbetasimpreml.rds')
}
if(file.exists('temp/modTfullHornsimpreml.rds')){
  modTfullHornsimpreml <- readRDS('temp/modTfullJbetasimpreml.rds')
} else {
  modTfullHornsimpreml <- update(modTfullHornsimp, method = 'REML')
  saveRDS(modTfullHornsimpreml, file = 'temp/modTfullHornsimpreml.rds')
}

# plot coefs
coefs2 <- summary(modTfullJbetasimpreml)$tTable
coefs3 <- summary(modTfullHornsimpreml)$tTable
varstoplot <- unique(c(rownames(coefs2), rownames(coefs3)))

rows1 <- which(!grepl('Intercept|REALM', varstoplot) | grepl(':', varstoplot)) # vars to plot in first graph
rows1_2 <- which(rownames(coefs2) %in% varstoplot[rows1]) # rows in coefs2
rows1_3 <- which(rownames(coefs3) %in% varstoplot[rows1]) # rows in coefs3
xlims1 <- range(c(coefs2[rows1_2,1] - coefs2[rows1_2,2], 
                  coefs2[rows1_2,1] + coefs2[rows1_2,2], 
                  coefs3[rows1_3,1] - coefs3[rows1_3,2], 
                  coefs3[rows1_3,1] + coefs3[rows1_3,2]))

rows2 <- which(grepl('REALM', varstoplot) & !grepl(':', varstoplot)) # vars to plot in 2nd graph
rows2_2 <- which(rownames(coefs2) %in% varstoplot[rows2]) # rows in coefs2
rows2_3 <- which(rownames(coefs3) %in% varstoplot[rows2]) # rows in coefs3
xlims2 <- range(c(coefs2[rows2_2,1] - coefs2[rows2_2,2], 
                  coefs2[rows2_2,1] + coefs2[rows2_2,2], 
                  coefs3[rows2_3,1] - coefs3[rows2_3,2], 
                  coefs3[rows2_3,1] + coefs3[rows2_3,2]))

cols <- c('black', 'grey') # for Jbeta and Horn models, respectively
offs <- 0.1 # offset vertically for the two models

par(mfrow=c(1,2), las = 1, mai = c(0.5, 3, 0.1, 0.1))

plot(0,0, col = 'white', xlim=xlims1, ylim = c(1,length(rows1)), yaxt='n', xlab = '', ylab ='')
axis(2, at = length(rows1):1, labels = varstoplot[rows1], cex.axis = 0.7)
abline(v = 0, col = 'grey')
for(i in 1:length(rows1)){
  if(varstoplot[rows1[i]] %in% rownames(coefs2)){
    x = coefs2[rownames(coefs2) == varstoplot[rows1[i]], 1]
    se = coefs2[rownames(coefs2) == varstoplot[rows1[i]], 2]
    points(x, length(rows1) + 1 - i + offs, pch = 16, col = cols[1])
    lines(x = c(x-se, x+se), y = c(length(rows1) + 1 - i + offs, length(rows1) + 1 - i + offs), col = cols[1])
  }
  if(varstoplot[rows1[i]] %in% rownames(coefs3)){
    x = coefs3[rownames(coefs3) == varstoplot[rows1[i]], 1]
    se = coefs3[rownames(coefs3) == varstoplot[rows1[i]], 2]
    points(x, length(rows1) + 1 - i - offs, pch = 16, col = cols[2])
    lines(x = c(x-se, x+se), y = c(length(rows1) + 1 - i - offs, length(rows1) + 1 - i - offs), col = cols[2])
  }
}

plot(0,0, col = 'white', xlim=xlims2, ylim = c(1,length(rows2)), yaxt='n', xlab = '', ylab ='')
axis(2, at = length(rows2):1, labels = varstoplot[rows2], cex.axis = 0.7)
abline(v = 0, col = 'grey')
for(i in 1:length(rows2)){
  if(varstoplot[rows2[i]] %in% rownames(coefs2)){
    x = coefs2[rownames(coefs2) == varstoplot[rows2[i]], 1]
    se = coefs2[rownames(coefs2) == varstoplot[rows2[i]], 2]
    points(x, length(rows2) + 1 - i + offs, pch = 16, col = cols[1])
    lines(x = c(x-se, x+se), y = c(length(rows2) + 1 - i + offs, length(rows2) + 1 - i + offs), col = cols[1])
  }
  if(varstoplot[rows2[i]] %in% rownames(coefs3)){
    x = coefs3[rownames(coefs3) == varstoplot[rows2[i]], 1]
    se = coefs3[rownames(coefs3) == varstoplot[rows2[i]], 2]
    points(x, length(rows2) + 1 - i - offs, pch = 16, col = cols[2])
    lines(x = c(x-se, x+se), y = c(length(rows2) + 1 - i - offs, length(rows2) + 1 - i - offs), col = cols[2])
  }
}

Black is for Jaccard total turnover (pres/abs), grey is for Morisita-Horn turnover (considers abundance)

To do

LS0tCnRpdGxlOiAnRHJpdmVycyBvZiB2YXJpYXRpb24gaW4gdGhlIGNvbW11bml0eSByZXNwb25zZSB0byB0ZW1wZXJhdHVyZSBjaGFuZ2UgYWNyb3NzIHJlYWxtcycKc3VidGl0bGU6ICcodXNpbmcgbWl4ZWQgZWZmZWN0cyBtb2RlbHMpJwpvdXRwdXQ6IAogICAgZ2l0aHViX2RvY3VtZW50OiBkZWZhdWx0CiAgICAjaHRtbF9kb2N1bWVudDogZGVmYXVsdAogICAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAotLS0KCkNvbGxhYm9yYXRvcnM6IFNoYW5lIEJsb3dlcywgSm9uIENoYXNlLCBIZWxtdXQgSGlsbGVicmFuZCwgTWljaGFlbCBCdXJyb3dzLCBBbWFuZGEgQmF0ZXMsIFVsaSBCcm9zZSwgQmVub2l0IEdhdXplbnMsIExhdXJhIEFudGFvCkFzc2lzdGFuY2U6IEthdGhlcmluZSBMZXcsIEpvc2VmIEhhdXNlcgoKIyBJbnRyb2R1Y3Rpb24KLSBDbGltYXRlIGNoYW5nZSBpcyBkcml2aW5nIGEgd2lkZXNwcmVhZCByZW9yZ2FuaXphdGlvbiBvZiBlY29sb2dpY2FsIGNvbW11bml0aWVzIGFyb3VuZCB0aGUgd29ybGQgKFBhcm1zZXNhbiAmIFlvaGUgMjAwMywgUG9sb2N6YW5za2EgZXQgYWwuIDIwMTMpLAotIGJ1dCB0aGUgaW1wYWN0cyBvZiBjbGltYXRlIGNoYW5nZSB2YXJ5IHN1YnN0YW50aWFsbHkgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhlciBhbmQgYW1vbmcgdGF4YSAoTW9saW5vcyBldCBhbC4gMjAxNiBOQ0MsIEFudGFvIGV0IGFsLiAyMDIwIE5FRSkuCi0gQ29tbXVuaXR5IHJlb3JnYW5pemF0aW9uIGlzIHN1YnN0YW50aWFsbHkgbW9yZSBjb21tb24gdGhhbiBhbiBhZ2dyZWdhdGUgbG9zcyBvciBnYWluIG9mIHNwZWNpZXMgKERvcm5lbGFzIGV0IGFsLiAyMDE0IFNjaWVuY2UsIEJsb3dlcyBldCBhbC4gMjAxOSBTY2llbmNlLCBIaWxsZWJyYW5kIGV0IGFsLiAyMDE3IEogQXBwbCBFY29sKQotIFRoZXJlIGFyZSBtYW55IGh5cG90aGVzZXMgZm9yIHdoeSBzb21lIGNvbW11bml0aWVzIGFyZSBtb3JlIHNlbnNpdGl2ZSB0byB3YXJtaW5nIHRoYW4gb3RoZXJzLCBpbmNsdWRpbmcgZGlmZmVyZW5jZXMgaW4KICAtIG1ldGFib2xpYyByYXRlcyAoRGlsbG9uIGV0IGFsLiAyMDEwIE5hdHVyZSksIAogIC0gdGhlcm1hbCBwaHlzaW9sb2d5IChEZXV0c2NoIGV0IGFsLiAyMDA4IFBOQVMsIFBpbnNreSBldCBhbC4gMjAxOSBOYXR1cmUpLCAKICAtIG1pY3JvY2xpbWF0ZSBhdmFpbGFiaWxpdHkgKEJ1cnJvd3MgZXQgYWwuIDIwMTkgTkNDLCBTdWdnaXR0IGV0IGFsLiAyMDE4IE5DQyksCiAgLSBzcGVjaWVzIG1vYmlsaXR5IChQb2xvY3phbnNrYSBldCBhbC4gMjAxMyBOQ0MsIEJ1cnJvd3MgZXQgYWwuIDIwMTEgU2NpZW5jZSwgU3VuZGF5IGV0IGFsLiAyMDEyIE5DQykKICAtIG9yIGdlbmVyYXRpb24gdGltZSAoQmVhdWdyYW5kIGV0IGFsLiAyMDA5IERTUiBJSSwgUG9sb2N6YW5za2EgZXQgYWwuIDIwMTMgTkNDKSwKICAtIGNvbnN1bWVycyB2cy4gcHJvZHVjZXJzIChQZXRjaGV5IGV0IGFsLiAxOTk5IE5hdHVyZSkKICAtIGNvbW11bml0eSBjb21wb3NpdGlvbiAoU3R1YXJ0LVNtaXRoIGV0IGFsLiAyMDE1IE5hdHVyZSwgQmVhdWdyYW5kIGV0IGEuIDIwMTUgTkNDLCBUcmlzb3MgZXQgYWwuIDIwMjAgTmF0dXJlKSwgCiAgLSBlY29zeXN0ZW0gcHJvZHVjdGl2aXR5IChUaG9tYXMgZXQgYWwuIDIwMTcgR0NCLCBCcmV0dCAxOTcxIEFtIFpvbyksCiAgLSBleHBvc3VyZSB0byBodW1hbiBpbXBhY3RzIChXaGl0ZSAmIEtlcnIgMjAwNiBFY29ncmFwaHkpCiAgLSBhbmQgYW1vbmcgcmVhbG1zIChBbnRhbyBldCBhbC4gMjAyMCBORUUpLgotIFNjYWxpbmcgdXAgZnJvbSBvcmdhbmlzbWFsIGVmZmVjdHMgdG8gd2hvbGUgZWNvbG9naWNhbCBjb21tdW5pdGllcyBpcyBjb21wbGV4LCBhbmQgeWV0IHRoZXNlIHNjYWxlcyBhcmUgY3JpdGljYWwgZm9yIGVjb3N5c3RlbSBmdW5jdGlvbmluZyBhbmQgaHVtYW4gd2VsbC1iZWluZy4gCi0gVGhlcmUgaXMgYSBuZWVkIGZvciBhIGNvbXByZWhlbnNpdmUgdGVzdCB0byB1bmRlcnN0YW5kIHdoZXJlIHdhcm1pbmcgaXMgZHJpdmluZyBhbmQgaXMgbGlrZWx5IHRvIGRyaXZlIHRoZSBtb3N0IGRyYW1hdGljIGNvbW11bml0eSB0dXJub3ZlcgoKIyBNZXRob2RzCi0gQmlvVGltZSBkYXRhc2V0LCBncmlkZGVkIHRvIDk2IGttMiBoZXhhZ29ucywgc3VtbWFyaXplZCBhcyB0ZW1wb3JhbCB0dXJub3ZlciAoQmxvd2VzKQogIC0gVGVtcG9yYWwgc2xvcGUgb2YgSmFjY2FyZCB0dXJub3ZlciBjb21wYXJlZCB0byB0aGUgZmlyc3QgeWVhcgogIC0gU2FtZSBmb3IgSmFjY2FyZCB0b3RhbAogIC0gYW5kIE1vcmlzaXRhLUhvcm4gdHVybm92ZXIKLSBUZXN0ZWQgZXhwbGFuYXRvcnkgdmFyaWFibGVzIGZvciBkaWZmZXJlbmNlcyBpbiByYXRlIG9mIHR1cm5vdmVyOgogIC0gVGVtcGVyYXR1cmUgdHJlbmQgb3ZlciB0aGUgdGltZS1mcmFtZSBvZiBlYWNoIHRpbWUtc2VyaWVzIChDUlUgVFMgNC4wMyBvbiBsYW5kIGFuZCBpbiBmcmVzaHdhdGVyLCBFUlNTVCB2NSBpbiB0aGUgb2NlYW4pCiAgLSBTZWFzb25hbGl0eSBhcyBhIG1ldHJpYyBvZiB0aGVybWFsIHNlbnNpdGl2aXR5IChEZXV0c2NoIGV0IGFsLiAyMDA4IFBOQVMpLiBTdGFuZGFyZCBkZXZpYXRpb24gb2YgbW9udGhseSB0ZW1wZXJhdHVyZXMuCiAgLSBBdmVyYWdlIHRlbXBlcmF0dXJlIGFzIGEgbWV0cmljIG9mIG1ldGFib2xpYyByYXRlcyAoRGlsbG9uIGV0IGFsLiAyMDEwIE5hdHVyZSwgQW50YW8gZXQgYWwuIDIwMjAgTmF0IEUmRSkKICAtIE1vYmlsaXR5IGNhbGN1bGF0ZWQgZnJvbSBib2R5IG1hc3MgYW5kIHRheG9ub21pYyBncm91cCBjbGFzc2lmaWNhdGlvbnMgb2YgbW9iaWxpdHkgbW9kZSAoZmx5LCBydW4sIHN3aW0sIGNyYXdsLCBzZXNzaWxlKS4gRmx5L3J1bi9zd2ltIGZvbGxvd2VkIHRoZSBhbGxvbWV0cmljIHJlbGF0aW9uc2hpcCBpbiBIaXJ0IGV0IGFsLiAyMDE3IE5hdCBFJkUuIENyYXdsIHNldCBhdCAwLjEga20vaHIsIHNlc3NpbGUgc2V0IHRvIDAga20vaHIuIFRoZW4gY2FsY3VsYXRlZCBhdmVyYWdlZCB3aXRoaW4gZWFjaCBhc3NlbWJsYWdlLgogIC0gTmV0IHByaW1hcnkgcHJvZHVjdGl2aXR5IChOUFApIGZyb20gdGhlIG1lcmdlZCBsYW5kL29jZWFuIHByb2R1Y3QgcHJvZHVjZWQgYnkgdGhlIFtPY2VhbiBQcm9kdWN0aXZpdHldKGh0dHA6Ly93d3cuc2NpZW5jZS5vcmVnb25zdGF0ZS5lZHUvb2NlYW4ucHJvZHVjdGl2aXR5LykgZ3JvdXAgYXQgT3JlZ29uIFN0YXRlIHVzaW5nIG1ldGhvZHMgZnJvbSBaaGFvIGV0IGFsLiAyMDA1IGFuZCBCZWhyZW5mZWxkICYgRmFsa293c2tpIDE5OTcuIAogLSBUTyBETzoKICAgLSBHZW5lcmF0aW9uIHRpbWUgY2FsY3VsYXRlZCBmcm9tIGJvZHkgbWFzcyBhbmQgZW5kb3RoZXJtIHZzLiBlY3RvdGhlcm0gY2xhc3NpZmljYXRpb25zLCBmb2xsb3dpbmcgTWNDb3kgJiBHaWxsb29seSAyMDA4IEVMRS4gQXZlcmFnZWQgYWNyb3NzIHNwZWNpZXMgd2l0aGluIGVhY2ggYXNzZW1ibGFnZS4gCiAgIC0gSHVtYW4gaW1wYWN0IGNhbGN1bGF0ZWQgZnJvbSBDYXJzdGVuIE1leWVyJ3MgZWNvc3lzdGVtIGN1YmUgZGF0YQogICAtIFRoZXJtYWwgYmlhcyBjYWxjdWxhdGVkIGZyb20gU3BlY2llcyBUZW1wZXJhdHVyZSBJbmRpY2VzIChNaWtlIEJ1cnJvd3MpCiAgIC0gTWljcm9jbGltYXRlcyBjYWxjdWxhdGVkIGZyb20gV29ybGRDbGltIGFuZCBCaW9PcmFjbGUgKExhdXJhIEFudGFvKQogICAtIENvbnN1bWVyIHZzLiBwcm9kdWNlciBjbGFzc2lmaWNhdGlvbgogLSBNYXliZSB0byBkbzoKICAgLSBTcGVjaWVzIHBvb2wgcmljaG5lc3MKLSBEaWZmZXJlbmNlcyBpbiB0ZW1wb3JhbCB0dXJub3ZlciAocmVzcG9uc2UgdmFyaWFibGUpIG1vZGVsZWQgd2l0aCBhIGxpbmVhciBtaXhlZCBlZmZlY3RzIG1vZGVsIChubG1lIHBhY2thZ2UsIGxtZSgpIGZ1bmN0aW9uKS4gU2VlIGJlbG93IGZvciBkZXRhaWxzLgoKYGBge3Igc2V0dXB9CmxpYnJhcnkoZGF0YS50YWJsZSkgIyBmb3IgaGFuZGxpbmcgbGFyZ2UgZGF0YXNldHMKbGlicmFyeShnZ3Bsb3QyKSAjIGZvciBzb21lIHBsb3R0aW5nCiNsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobmxtZSkgIyBmb3IgTUUgbW9kZWxzCmxpYnJhcnkoYmVhbnBsb3QpICMgZm9yIGJlYW5wbG90cwpsaWJyYXJ5KG1hcHMpICMgZm9yIG1hcApsaWJyYXJ5KGdnZWZmZWN0cykgIyBtYXJnaW5hbCBlZmZlY3QgcGxvdHMKbGlicmFyeShncmlkRXh0cmEpICMgdG8gY29tYmluZSBnZ3Bsb3RzIHRvZ2V0aGVyCmxpYnJhcnkoZ3JpZCkgIyB0byBjb21iaW5lIGdncGxvdHMgdG9nZXRoZXIKbGlicmFyeShncmlkRXh0cmEpCgpvcHRpb25zKHdpZHRoPTUwMCkgIyB0dXJuIG9mZiBtb3N0IHRleHQgd3JhcHBpbmcKCiMgdGVsbCBSU3R1ZGlvIHRvIHVzZSBwcm9qZWN0IHJvb3QgZGlyZWN0b3J5IGFzIHRoZSByb290IGZvciB0aGlzIG5vdGVib29rLiBOZWVkZWQgc2luY2Ugd2UgYXJlIHN0b3JpbmcgY29kZSBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeS4Ka25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSBycHJvanJvb3Q6OmZpbmRfcnN0dWRpb19yb290X2ZpbGUoKSkgCmBgYAoKYGBge3IgbG9hZCBkYXRhfQojIFR1cm5vdmVyIGFuZCBjb3ZhcmlhdGVzIGFzc2VtYmxlZCBieSB0dXJub3Zlcl92c190ZW1wZXJhdHVyZV9wcmVwLlJtZAp0cmVuZHMgPC0gZnJlYWQoJ291dHB1dC90dXJub3Zlcl93X2NvdmFyaWF0ZXMuY3N2Lmd6JykKCiMgc2V0IHJlYWxtIG9yZGVyCnRyZW5kc1ssIFJFQUxNIDo9IGZhY3RvcihSRUFMTSwgbGV2ZWxzID0gYygnRnJlc2h3YXRlcicsICdNYXJpbmUnLCAnVGVycmVzdHJpYWwnKSwgb3JkZXJlZCA9IEZBTFNFKV0KCiMgZ3JvdXAgTWFyaW5lIGludmVydGVicmF0ZXMvcGxhbnRzIGluIHdpdGggQWxsCnRyZW5kc1ssIHRheGFfbW9kMiA6PSB0YXhhX21vZF0KdHJlbmRzW3RheGFfbW9kID09ICdNYXJpbmUgaW52ZXJ0ZWJyYXRlcy9wbGFudHMnLCB0YXhhX21vZDIgOj0gJ0FsbCddCmBgYAoKTG9nLXRyYW5zZm9ybSBzb21lIHZhcmlhYmxlcywgdGhlbiBjZW50ZXIgYW5kIHNjYWxlLiAKYGBgIHtyIGNlbnRlciBhbmQgc2NhbGV9CnRyZW5kc1ssIHRlbXBhdmUuc2MgOj0gc2NhbGUodGVtcGF2ZSldCnRyZW5kc1ssIHRlbXBhdmVfbWV0YWIuc2MgOj0gc2NhbGUodGVtcGF2ZV9tZXRhYildCnRyZW5kc1ssIHNlYXMuc2MgOj0gc2NhbGUoc2VhcyldCnRyZW5kc1ssIG1pY3JvY2xpbS5zYyA6PSBzY2FsZShsb2cobWljcm9jbGltKSldCnRyZW5kc1ssIHRlbXB0cmVuZC5zYyA6PSBzY2FsZSh0ZW1wdHJlbmQpXQp0cmVuZHNbLCB0ZW1wdHJlbmRfYWJzLnNjIDo9IHNjYWxlKGxvZyhhYnModGVtcHRyZW5kKSkpXQp0cmVuZHNbLCBucHAuc2MgOj0gc2NhbGUobG9nKG5wcCkpXQp0cmVuZHNbLCBtYXNzLnNjIDo9IHNjYWxlKGxvZyhtYXNzX21lYW5fd2VpZ2h0KSldCnRyZW5kc1ssIHNwZWVkLnNjIDo9IHNjYWxlKGxvZyhzcGVlZF9tZWFuX3dlaWdodCsxKSldCnRyZW5kc1ssIGxpZmVzcGFuLnNjIDo9IHNjYWxlKGxvZyhsaWZlc3Bhbl9tZWFuX3dlaWdodCkpXQp0cmVuZHNbLCB0aGVybWFsX2JpYXMuc2MgOj0gc2NhbGUodGhlcm1hbF9iaWFzKV0KdHJlbmRzWywgY29uc3VtZXJmcmFjLnNjIDo9IHNjYWxlKGNvbnNmcmFjKV0KdHJlbmRzWywgZW5kb3RoZXJtZnJhYy5zYyA6PSBzY2FsZShlbmRvZnJhYyldCnRyZW5kc1ssIG5zcHAuc2MgOj0gc2NhbGUobG9nKE5zcHApKV0KdHJlbmRzWywgaHVtYW4uc2MgOj0gc2NhbGUoaHVtYW4pXQpgYGAKCkRvIHRoZSB2YXJpYWJsZXMgbG9vayBvaz8KYGBge3IgaGlzdG9ncmFtc30KIyBoaXN0b2dyYW1zIHRvIGV4YW1pbmUKY2V4bWFpbiA9IDAuNgpwYXIobWZyb3cgPSBjKDMsNSkpCmludmlzaWJsZSh0cmVuZHNbLCBoaXN0KHRlbXBhdmUuc2MsIG1haW4gPSAnRW52aXJvbm1lbnRhbCB0ZW1wZXJhdHVyZSAowrBDKScsIGNleC5tYWluID0gY2V4bWFpbildKQppbnZpc2libGUodHJlbmRzWywgaGlzdCh0ZW1wYXZlX21ldGFiLnNjLCBtYWluID0gJ01ldGFib2xpYyB0ZW1wZXJhdHVyZSAowrBDKScsIGNleC5tYWluID0gY2V4bWFpbildKQppbnZpc2libGUodHJlbmRzWywgaGlzdChzZWFzLnNjLCBtYWluID0gJ1NlYXNvbmFsaXR5ICjCsEMpJywgY2V4Lm1haW4gPSBjZXhtYWluKV0pCmludmlzaWJsZSh0cmVuZHNbLCBoaXN0KG1pY3JvY2xpbS5zYywgbWFpbiA9ICdsb2cgTWljcm9jbGltYXRlcyAowrBDKScsIGNleC5tYWluID0gY2V4bWFpbildKQppbnZpc2libGUodHJlbmRzWywgaGlzdCh0ZW1wdHJlbmQuc2MsIG1haW4gPSAnVGVtcGVyYXR1cmUgdHJlbmQgKMKwQy95ciknLCBjZXgubWFpbiA9IGNleG1haW4pXSkKaW52aXNpYmxlKHRyZW5kc1ssIGhpc3QodGVtcHRyZW5kX2Ficy5zYywgbWFpbiA9ICdsb2cgYWJzKFRlbXBlcmF0dXJlIHRyZW5kKSAowrBDL3lyKScsIGNleC5tYWluID0gY2V4bWFpbildKQppbnZpc2libGUodHJlbmRzWywgaGlzdChtYXNzLnNjLCBtYWluID0gJ2xvZyBNYXNzIChnKScsIGNleC5tYWluID0gY2V4bWFpbildKQppbnZpc2libGUodHJlbmRzWywgaGlzdChzcGVlZC5zYywgbWFpbiA9ICdsb2cgU3BlZWQgKGttL2hyKScsIGNleC5tYWluID0gY2V4bWFpbildKQppbnZpc2libGUodHJlbmRzWywgaGlzdChsaWZlc3Bhbi5zYywgbWFpbiA9ICdsb2cgTGlmZXNwYW4gKHlyKScsIGNleC5tYWluID0gY2V4bWFpbildKQppbnZpc2libGUodHJlbmRzWywgaGlzdChjb25zdW1lcmZyYWMuc2MsIG1haW4gPSAnQ29uc3VtZXJzIChmcmFjdGlvbiknLCBjZXgubWFpbiA9IGNleG1haW4pXSkKaW52aXNpYmxlKHRyZW5kc1ssIGhpc3QoZW5kb3RoZXJtZnJhYy5zYywgbWFpbiA9ICdFbmRvdGhlcm1zIChmcmFjdGlvbiknLCBjZXgubWFpbiA9IGNleG1haW4pXSkKaW52aXNpYmxlKHRyZW5kc1ssIGhpc3QobnNwcC5zYywgbWFpbiA9ICdsb2cgU3BlY2llcyByaWNobmVzcycsIGNleC5tYWluID0gY2V4bWFpbildKQppbnZpc2libGUodHJlbmRzWywgaGlzdCh0aGVybWFsX2JpYXMuc2MsIG1haW4gPSAnVGhlcm1hbCBiaWFzICjCsEMpJywgY2V4Lm1haW4gPSBjZXhtYWluKV0pCmludmlzaWJsZSh0cmVuZHNbLCBoaXN0KG5wcC5zYywgbWFpbiA9ICdsb2cgTmV0IHByaW1hcnkgcHJvZHVjdGl2aXR5JywgY2V4Lm1haW4gPSBjZXhtYWluKV0pCmludmlzaWJsZSh0cmVuZHNbLCBoaXN0KGh1bWFuLnNjLCBtYWluID0gJ0h1bWFuIGltcGFjdCBzY29yZScsIGNleC5tYWluID0gY2V4bWFpbildKQoKYGBgCgpDaGVjayBjb3JyZWxhdGlvbnMgYW1vbmcgdmFyaWFibGVzLiBQZWFyc29uJ3MgciBpcyBvbiB0aGUgbG93ZXIgZGlhZ29uYWwuCmBgYHtyIHBhaXJzLCBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9MTB9CnBhbmVsLmNvciA8LSBmdW5jdGlvbih4LCB5LCBkaWdpdHMgPSAyLCBwcmVmaXggPSAiIiwgY2V4LmNvciwgLi4uKQp7CiAgICB1c3IgPC0gcGFyKCJ1c3IiKTsgb24uZXhpdChwYXIodXNyKSkKICAgIHBhcih1c3IgPSBjKDAsIDEsIDAsIDEpKQogICAgciA8LSBjb3IoeCwgeSwgdXNlID0gJ3BhaXJ3aXNlLmNvbXBsZXRlLm9icycpCiAgICB0eHQgPC0gZm9ybWF0KGMociwgMC4xMjM0NTY3ODkpLCBkaWdpdHMgPSBkaWdpdHMpWzFdCiAgICB0eHQgPC0gcGFzdGUwKHByZWZpeCwgdHh0KQogICAgaWYobWlzc2luZyhjZXguY29yKSkgY2V4LmNvciA8LSAwLjgvc3Ryd2lkdGgodHh0KQogICAgdGV4dCgwLjUsIDAuNSwgdHh0KSAjLCBjZXggPSBjZXguY29yICogcikKfQpwYWlycyhmb3JtdWxhID0gfiBSRUFMTSArIHRlbXBhdmUuc2MgKyB0ZW1wYXZlX21ldGFiLnNjICsgc2Vhcy5zYyArIG1pY3JvY2xpbS5zYyArIHRlbXB0cmVuZC5zYyArIHRlbXB0cmVuZF9hYnMuc2MgKyAgbWFzcy5zYyArIHNwZWVkLnNjICsgbGlmZXNwYW4uc2MgKyBjb25zdW1lcmZyYWMuc2MgKyBlbmRvdGhlcm1mcmFjLnNjICsgbnNwcC5zYyArIHRoZXJtYWxfYmlhcy5zYyArIG5wcC5zYyArIGh1bWFuLnNjLCBkYXRhID0gdHJlbmRzLCBnYXAgPSAxLzEwLCBjZXggPSAwLjIsIGNvbCA9ICcjMDAwMDAwMjInLCBsb3dlci5wYW5lbCA9IHBhbmVsLmNvcikKCmBgYApNYXNzIGFuZCBsaWZlc3BhbiBsb29rIHRpZ2h0bHkgY29ycmVsYXRlZCwgYnV0IHIgb25seSAwLjU2Li4uPwpUZW1wYXZlX21ldGFiIGFuZCBsaWZlc3BhbiBkb24ndCBsb29rIHRpZ2h0bHkgY29ycmVsYXRlZCwgYnV0IHI9IC0wLjgxIApUZW1wYXZlX21ldGFiIGFuZCBzcGVlZCBkb24ndCBsb29rIHRpZ2h0bHkgY29ycmVsYXRlZCwgYnV0IHI9IC0wLjgzIApMaWZlc3BhbiBhbmQgc3BlZWQgZG9uJ3QgbG9vayB0aWdodGx5IGNvcnJlbGF0ZWQsIGJ1dCByID0gMC43MwoKCkV4YW1pbmUgaG93IG1hbnkgZGF0YSBwb2ludHMgYXJlIGF2YWlsYWJsZQpgYGB7ciBzYW1wbGUgc2l6ZSBmb3IgSmFjY2FyZCB0dXJub3Zlcn0KIyB0aGUgY2FzZXMgd2UgY2FuIGNvbXBhcmUKYXBwbHkodHJlbmRzWywgLihKdHV0cmVuZCwgUkVBTE0sIHRlbXBhdmUuc2MsIHRlbXBhdmVfbWV0YWIuc2MsIHNlYXMuc2MsIG1pY3JvY2xpbS5zYywgdGVtcHRyZW5kLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgbGlmZXNwYW4uc2MsIGNvbnN1bWVyZnJhYy5zYywgZW5kb3RoZXJtZnJhYy5zYywgbnNwcC5zYywgdGhlcm1hbF9iaWFzLnNjLCBucHAuc2MsIGh1bWFuLnNjKV0sIE1BUkdJTiA9IDIsIEZVTiA9IGZ1bmN0aW9uKHgpIHN1bSghaXMubmEoeCkpKQppIDwtIHRyZW5kc1ssIGNvbXBsZXRlLmNhc2VzKEp0dXRyZW5kLCB0ZW1wdHJlbmQuc2MsIHRlbXBhdmVfbWV0YWIuc2MsIFJFQUxNLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIG5wcC5zYywgbWFzcy5zYywgc3BlZWQuc2MsIGxpZmVzcGFuLnNjLCBjb25zdW1lcmZyYWMuc2MsIHRoZXJtYWxfYmlhcy5zYyldCmNhdCgnT3ZlcmFsbDpcbicpCnN1bShpKQpgYGAKCiMjIyBDaG9vc2UgdGhlIHZhcmlhbmNlIHN0cnVjdHVyZSBmb3IgbWl4ZWQgZWZmZWN0cyBtb2RsZXMKVHJ5IGNvbWJpbmF0aW9ucyBvZgoKLSB2YXJpYW5jZSBzY2FsZWQgdG8gYSBwb3dlciBvZiB0aGUgbnVtYmVyIG9mIHllYXJzIGluIHRoZSBjb21tdW5pdHkgdGltZS1zZXJpZXMKLSB2YXJpYW5jZSBzY2FsZWQgdG8gYSBwb3dlciBvZiB0aGUgYWJzIHRlbXBlcmF0dXJlIHRyZW5kCi0gcmFuZG9tIGludGVyY2VwdCBmb3IgdGF4YV9tb2QKLSByYW5kb20gaW50ZXJjZXB0IGZvciBTVFVEWV9JRAotIHJhbmRvbSBzbG9wZSAoYWJzIHRlbXBlcmF0dXJlIHRyZW5kKSBmb3IgdGF4YV9tb2QKLSByYW5kb20gc2xvcGUgKGFicyB0ZW1wZXJhdHVyZSB0cmVuZCkgZm9yIFNUVURZX0lECi0gcmFuZG9tIGludGVyY2VwdCBmb3IgcmFyZWZ5SUQgKGZvciBvdmVyZGlzcGVyc2lvbikKCkFuZCBjaG9vc2UgdGhlIG9uZSB3aXRoIGxvd2VzdCBBSUMgKG5vdCBydW46IHRha2VzIGEgbG9uZyB0aW1lKQpgYGB7ciBjaG9vc2UgdmFyaWFuY2Ugc3RydWN0dXJlIGZvciBKYWNhcmQgdHVybm92ZXIsIGV2YWwgPSBGQUxTRX0KIyBmaXQgbW9kZWxzIGZvciB2YXJpYW5jZSBzdHJ1Y3R1cmUKZml4ZWQgPC0gZm9ybXVsYShKdHV0cmVuZCB+IFJFQUxNICsgdGVtcGF2ZV9tZXRhYi5zYyArIHNlYXMuc2MgKyBtaWNyb2NsaW0uc2MgKyBucHAuc2MgKyB0ZW1wdHJlbmRfYWJzLnNjICsKICAgICAgICAgICAgICAgICAgICAgbWFzcy5zYyArIHNwZWVkLnNjICsgbGlmZXNwYW4uc2MgKyBjb25zdW1lcmZyYWMuc2MgKyB0aGVybWFsX2JpYXMuc2MpCmkgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSnR1dHJlbmQsIFJFQUxNLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIG5wcC5zYywgdGVtcHRyZW5kX2Ficy5zYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNzLnNjLCBzcGVlZC5zYywgbGlmZXNwYW4uc2MsIGNvbnN1bWVyZnJhYy5zYywgdGhlcm1hbF9iaWFzLnNjKV0KbW9kcyA8LSB2ZWN0b3IoJ2xpc3QnLCAwKQptb2RzW1sxXV0gPC0gZ2xzKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSkKbW9kc1tbMl1dIDwtIGdscyhmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+bnlyQlQpKQptb2RzW1szXV0gPC0gZ2xzKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgd2VpZ2h0cyA9IHZhclBvd2VyKDAuNSwgfiBhYnModGVtcHRyZW5kKSkpCgptb2RzW1s0XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfjF8dGF4YV9tb2QyLCBjb250cm9sID0gbG1lQ29udHJvbChvcHQgPSAib3B0aW0iKSkKbW9kc1tbNV1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfFNUVURZX0lELCBjb250cm9sID0gbG1lQ29udHJvbChvcHQgPSAib3B0aW0iKSkKbW9kc1tbNl1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfHRheGFfbW9kMi9TVFVEWV9JRCwgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gIm9wdGltIikpCm1vZHNbWzddXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+MXxTVFVEWV9JRC9yYXJlZnlJRCwgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gIm9wdGltIikpCm1vZHNbWzhdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+MXx0YXhhX21vZDIvU1RVRFlfSUQvcmFyZWZ5SUQsIGNvbnRyb2wgPSBsbWVDb250cm9sKG9wdCA9ICJvcHRpbSIpKQoKbW9kc1tbOV1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH50ZW1wdHJlbmRfYWJzLnNjIHwgdGF4YV9tb2QpCm1vZHNbWzEwXV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfnRlbXB0cmVuZF9hYnMuc2MgfCBTVFVEWV9JRCkKbW9kc1tbMTFdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+dGVtcHRyZW5kX2Ficy5zYyB8IHRheGFfbW9kMi9TVFVEWV9JRCwgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gIm9wdGltIikpCm1vZHNbWzEyXV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gbGlzdChTVFVEWV9JRCA9IH4gdGVtcHRyZW5kX2Ficy5zYywgcmFyZWZ5SUQgPSB+MSkpICMgaW5jbHVkZXMgb3ZlcmRpc3BlcnNpb24uIG5ldyBmb3JtdWxhIHNvIHRoYXQgcmFuZG9tIHNsb3BlIGlzIG9ubHkgZm9yIHN0dWR5IGxldmVsIChub3QgZW5vdWdoIGRhdGEgdG8gZXh0ZW5kIHRvIHJhcmVmeUlEKS4KbW9kc1tbMTNdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpKSAjIDMwKyBtaW4gdG8gZml0Cgptb2RzW1sxNF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfFNUVURZX0lELCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkKbW9kc1tbMTVdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+MXx0YXhhX21vZDIsIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+bnlyQlQpKQptb2RzW1sxNl1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfHRheGFfbW9kMi9TVFVEWV9JRCwgd2VpZ2h0cyA9IHZhclBvd2VyKC0wLjUsIH5ueXJCVCkpCm1vZHNbWzE3XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfjF8U1RVRFlfSUQvcmFyZWZ5SUQsIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+bnlyQlQpKQptb2RzW1sxOF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfHRheGFfbW9kMi9TVFVEWV9JRC9yYXJlZnlJRCwgd2VpZ2h0cyA9IHZhclBvd2VyKC0wLjUsIH5ueXJCVCkpCm1vZHNbWzE5XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfnRlbXB0cmVuZF9hYnMuc2N8U1RVRFlfSUQsIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+bnlyQlQpKQptb2RzW1syMF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IGxpc3QoU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkKbW9kc1tbMjFdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IDEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkKbW9kc1tbMjJdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IDEsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkKbW9kc1tbMjNdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkgIyBzaW5ndWxhciBwcmVjaXNpb24gd2FybmluZyB3aXRoIGxtZUNvbnRyb2wob3B0ID0gJ29wdGltJykgYW5kIGNvbnZlcmdlbmNlIGVycm9yIHdpdGhvdXQKbW9kc1tbMjRdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkgIyBzaW5ndWxhciBwcmVjaXNpb24gd2FybmluZyB3aXRoIGxtZUNvbnRyb2wob3B0ID0gJ29wdGltJykgYW5kIGNvbnZlcmdlbmNlIGVycm9yIHdpdGhvdXQKCm1vZHNbWzI1XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfjF8dGF4YV9tb2QyLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfmFicyh0ZW1wdHJlbmQpKSkKbW9kc1tbMjZdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+MXxTVFVEWV9JRCwgd2VpZ2h0cyA9IHZhclBvd2VyKC0wLjUsIH5hYnModGVtcHRyZW5kKSkpCm1vZHNbWzI3XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfjF8U1RVRFlfSUQvcmFyZWZ5SUQsIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+YWJzKHRlbXB0cmVuZCkpKQptb2RzW1syOF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfHRheGFfbW9kMi9TVFVEWV9JRC9yYXJlZnlJRCwgd2VpZ2h0cyA9IHZhclBvd2VyKC0wLjUsIH5hYnModGVtcHRyZW5kKSkpCm1vZHNbWzI5XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfnRlbXB0cmVuZF9hYnMuc2N8U1RVRFlfSUQsIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+YWJzKHRlbXB0cmVuZCkpKQptb2RzW1szMF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH50ZW1wdHJlbmRfYWJzLnNjfHRheGFfbW9kMi9TVFVEWV9JRCwgd2VpZ2h0cyA9IHZhclBvd2VyKC0wLjUsIH5hYnModGVtcHRyZW5kKSksIGNvbnRyb2wgPSBsbWVDb250cm9sKG9wdCA9ICJvcHRpbSIpKQptb2RzW1szMV1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IGxpc3QoU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfmFicyh0ZW1wdHJlbmQpKSkKbW9kc1tbMzJdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfmFicyh0ZW1wdHJlbmQpKSwgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gIm9wdGltIikpICMgc2luZ3VsYXIgcHJlY2lzaW9uIHdhcm5pbmcKCmFpY3MgPC0gc2FwcGx5KG1vZHMsIEFJQykKbWluYWljcyA8LSBhaWNzIC0gbWluKGFpY3MpCm1pbmFpY3MKd2hpY2gubWluKGFpY3MpCmBgYApDaG9vc2VzIHRoZSByYW5kb20gc2xvcGVzICh0ZW1wdHJlbmRfYWJzKSAmIGludGVyY2VwdHMgZm9yIFNUVURZX0lELCBvdmVyZGlzcGVyc2lvbiwgYW5kIHZhcmlhbmNlIHNjYWxlZCB0byBudW1iZXIgb2YgeWVhcnMuCldlIGhhdmVuJ3QgZGVhbHQgd2l0aCBwb3RlbnRpYWwgdGVzdGluZyBvbiB0aGUgYm91bmRhcnkgaXNzdWVzIGhlcmUgeWV0LgoKIyBSZXN1bHRzCiMjIFdoZXJlIGRvIHdlIGhhdmUgZGF0YT8KYGBge3IgbWFwfQp3b3JsZCA8LSBtYXBfZGF0YSgnd29ybGQnKQpnZ3Bsb3Qod29ybGQsIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCkpICsKICAgIGdlb21fcG9seWdvbihmaWxsID0gJ2xpZ2h0Z3JheScsIGNvbG9yID0gJ3doaXRlJykgKwogICAgZ2VvbV9wb2ludChkYXRhID0gdHJlbmRzLCBhZXMocmFyZWZ5SURfeCwgcmFyZWZ5SURfeSwgZ3JvdXAgPSBSRUFMTSwgY29sb3IgPSBSRUFMTSksIHNpemUgPSAwLjUsIGFscGhhID0gMC40KSAgKwogICAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGU9IlNldDEiKQpgYGAKTW9zdGx5IG5vcnRoZXJuIGhlbWlzcGhlcmUsIGJ1dCBzcHJlYWQgYWxsIG92ZXIuIE5vIHNvIG11Y2ggaW4gQWZyaWNhIG9yIG11Y2ggb2YgQXNpYS4KCgojIyBQbG90IHR1cm5vdmVyIHZzLiBleHBsYW5hdG9yeSB2YXJpYWJsZXMKTGluZXMgYXJlIGdncGxvdCBzbW9vdGhlciBmaXRzIGJ5IHJlYWxtLgpgYGB7ciBwbG90IHR1cm5vdmVyIHYgdGVtcCB0cmVuZCwgZWNobz1GQUxTRSwgZmlnLmhlaWdodCA9IDE2LCBmaWcud2lkdGggPSA5LH0KCnAxIDwtIGdncGxvdCh0cmVuZHMsIGFlcyhSRUFMTSwgSnR1dHJlbmQpKSArCiAgZ2VvbV9ib3hwbG90KG5hLnJtID0gVFJVRSkgKyAKICBsYWJzKHggPSAnUmVhbG0nLCB5ID0gJ0phY2NhcmQgdHVybm92ZXIgdGVtcG9yYWwgdHJlbmQnKQoKcDIgPC0gZ2dwbG90KHRyZW5kcywgYWVzKHRlbXBhdmUsIEp0dXRyZW5kLCBzaXplID0gbnlyQlQpKSArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBSRUFMTSksIHNpemUgPSAwLjIsIGFscGhhID0gMC41LCBuYS5ybSA9IFRSVUUpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2dhbScsIGZvcm11bGEgPSB5IH4gcyh4LCBicyA9ICJjcyIpLCBuYS5ybSA9IFRSVUUsIGNvbG9yID0gJ2JsYWNrJykgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlPSJTZXQxIikgKyAKICBsYWJzKHggPSAnVGVtcGVyYXR1cmUgKMKwQyknLCB5ID0gJ0phY2NhcmQgdHVybm92ZXIgdGVtcG9yYWwgdHJlbmQnKQoKcDMgPC0gZ2dwbG90KHRyZW5kcywgYWVzKHRlbXBhdmVfbWV0YWIsIEp0dXRyZW5kLCBzaXplID0gbnlyQlQpKSArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBSRUFMTSksIHNpemUgPSAwLjIsIGFscGhhID0gMC41LCBuYS5ybSA9IFRSVUUpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2dhbScsIGZvcm11bGEgPSB5IH4gcyh4LCBicyA9ICJjcyIpLCBuYS5ybSA9IFRSVUUsIGNvbG9yID0gJ2JsYWNrJykgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlPSJTZXQxIikgKyAKICBsYWJzKHggPSAnTWV0YWJvbGljIHRlbXBlcmF0dXJlICjCsEMpJywgeSA9ICdKYWNjYXJkIHR1cm5vdmVyIHRlbXBvcmFsIHRyZW5kJykKCnA0IDwtIGdncGxvdCh0cmVuZHMsIGFlcyhzZWFzLCBKdHV0cmVuZCwgc2l6ZSA9IG55ckJUKSkgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gUkVBTE0pLCBzaXplID0gMC4yLCBhbHBoYSA9IDAuNSwgbmEucm0gPSBUUlVFKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICdnYW0nLCBmb3JtdWxhID0geSB+IHMoeCwgYnMgPSAiY3MiKSwgbmEucm0gPSBUUlVFLCBjb2xvciA9ICdibGFjaycpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZT0iU2V0MSIpICsgCiAgbGFicyh4ID0gJ1NlYXNvbmFsaXR5ICjCsEMpJywgeSA9ICdKYWNjYXJkIHR1cm5vdmVyIHRlbXBvcmFsIHRyZW5kJykKCnA1IDwtIGdncGxvdCh0cmVuZHMsIGFlcyhtaWNyb2NsaW0sIEp0dXRyZW5kLCBzaXplID0gbnlyQlQpKSArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBSRUFMTSksIHNpemUgPSAwLjIsIGFscGhhID0gMC41LCBuYS5ybSA9IFRSVUUpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2dhbScsIGZvcm11bGEgPSB5IH4gcyh4LCBicyA9ICJjcyIpLCBuYS5ybSA9IFRSVUUsIGNvbG9yID0gJ2JsYWNrJykgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlPSJTZXQxIikgKyAKICBzY2FsZV94X2xvZzEwKCkgKwogIGxhYnMoeCA9ICdNaWNyb2NsaW1hdGUgYXZhaWxhYmlsaXR5ICjCsEMpJywgeSA9ICdKYWNjYXJkIHR1cm5vdmVyIHRlbXBvcmFsIHRyZW5kJykKCnA2IDwtIGdncGxvdCh0cmVuZHMsIGFlcyhtYXNzX21lYW5fd2VpZ2h0LCBKdHV0cmVuZCwgc2l6ZSA9IG55ckJUKSkgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gUkVBTE0pLCBzaXplID0gMC4yLCBhbHBoYSA9IDAuNSwgbmEucm0gPSBUUlVFKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICdnYW0nLCBmb3JtdWxhID0geSB+IHMoeCwgYnMgPSAiY3MiKSwgbmEucm0gPSBUUlVFLCBjb2xvciA9ICdibGFjaycpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZT0iU2V0MSIpICsgCiAgc2NhbGVfeF9sb2cxMCgpICsKICBsYWJzKHggPSAnTWFzcyAoZykpJywgeSA9ICdKYWNjYXJkIHR1cm5vdmVyIHRlbXBvcmFsIHRyZW5kJykKCnA3IDwtIGdncGxvdCh0cmVuZHMsIGFlcyhzcGVlZF9tZWFuX3dlaWdodCsxLCBKdHV0cmVuZCwgc2l6ZSA9IG55ckJUKSkgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gUkVBTE0pLCBzaXplID0gMC4yLCBhbHBoYSA9IDAuNSwgbmEucm0gPSBUUlVFKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICdnYW0nLCBmb3JtdWxhID0geSB+IHMoeCwgYnMgPSAiY3MiKSwgbmEucm0gPSBUUlVFLCBjb2xvciA9ICdibGFjaycpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZT0iU2V0MSIpICsgCiAgc2NhbGVfeF9sb2cxMCgpICsKICBsYWJzKHggPSAnU3BlZWQgKGttIC8gaHIpKScsIHkgPSAnSmFjY2FyZCB0dXJub3ZlciB0ZW1wb3JhbCB0cmVuZCcpCgpwOCA8LSBnZ3Bsb3QodHJlbmRzLCBhZXMobGlmZXNwYW5fbWVhbl93ZWlnaHQsIEp0dXRyZW5kLCBzaXplID0gbnlyQlQpKSArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBSRUFMTSksIHNpemUgPSAwLjIsIGFscGhhID0gMC41LCBuYS5ybSA9IFRSVUUpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2dhbScsIGZvcm11bGEgPSB5IH4gcyh4LCBicyA9ICJjcyIpLCBuYS5ybSA9IFRSVUUsIGNvbG9yID0gJ2JsYWNrJykgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlPSJTZXQxIikgKyAKICBzY2FsZV94X2xvZzEwKCkgKwogIGxhYnMoeCA9ICdMaWZlc3BhbiAoeXIpKScsIHkgPSAnSmFjY2FyZCB0dXJub3ZlciB0ZW1wb3JhbCB0cmVuZCcpCgpwOSA8LSBnZ3Bsb3QodHJlbmRzLCBhZXMoY29uc2ZyYWMsIEp0dXRyZW5kLCBzaXplID0gbnlyQlQpKSArCiAgZ2VvbV9wb2ludChhZXMoY29sb3IgPSBSRUFMTSksIHNpemUgPSAwLjIsIGFscGhhID0gMC41LCBuYS5ybSA9IFRSVUUpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gJ2dhbScsIGZvcm11bGEgPSB5IH4gcyh4LCBicyA9ICJjcyIsIGsgPSAzKSwgbmEucm0gPSBUUlVFLCBjb2xvciA9ICdibGFjaycpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZT0iU2V0MSIpICsgCiAgbGFicyh4ID0gJ0ZyYWN0aW9uIGNvbnN1bWVycycsIHkgPSAnSmFjY2FyZCB0dXJub3ZlciB0ZW1wb3JhbCB0cmVuZCcpCgpwMTAgPC0gZ2dwbG90KHRyZW5kcywgYWVzKGVuZG9mcmFjLCBKdHV0cmVuZCwgc2l6ZSA9IG55ckJUKSkgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gUkVBTE0pLCBzaXplID0gMC4yLCBhbHBoYSA9IDAuNSwgbmEucm0gPSBUUlVFKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICdnYW0nLCBmb3JtdWxhID0geSB+IHMoeCwgYnMgPSAiY3MiLCBrID0gMyksIG5hLnJtID0gVFJVRSwgY29sb3IgPSAnYmxhY2snKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGU9IlNldDEiKSArIAogIGxhYnMoeCA9ICdGcmFjdGlvbiBlbmRvdGhlcm1zJywgeSA9ICdKYWNjYXJkIHR1cm5vdmVyIHRlbXBvcmFsIHRyZW5kJykKCnAxMSA8LSBnZ3Bsb3QodHJlbmRzLCBhZXMoTnNwcCwgSnR1dHJlbmQsIHNpemUgPSBueXJCVCkpICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IFJFQUxNKSwgc2l6ZSA9IDAuMiwgYWxwaGEgPSAwLjUsIG5hLnJtID0gVFJVRSkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAnZ2FtJywgZm9ybXVsYSA9IHkgfiBzKHgsIGJzID0gImNzIiksIG5hLnJtID0gVFJVRSwgY29sb3IgPSAnYmxhY2snKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGU9IlNldDEiKSArIAogIHNjYWxlX3hfbG9nMTAoKSArCiAgbGFicyh4ID0gJ051bWJlciBvZiBzcGVjaWVzJywgeSA9ICdKYWNjYXJkIHR1cm5vdmVyIHRlbXBvcmFsIHRyZW5kJykKCnAxMiA8LSBnZ3Bsb3QodHJlbmRzLCBhZXModGhlcm1hbF9iaWFzLCBKdHV0cmVuZCwgc2l6ZSA9IG55ckJUKSkgKwogIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gUkVBTE0pLCBzaXplID0gMC4yLCBhbHBoYSA9IDAuNSwgbmEucm0gPSBUUlVFKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICdnYW0nLCBmb3JtdWxhID0geSB+IHMoeCwgYnMgPSAiY3MiKSwgbmEucm0gPSBUUlVFLCBjb2xvciA9ICdibGFjaycpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZT0iU2V0MSIpICsgCiAgbGFicyh4ID0gJ1RoZXJtYWwgYmlhcyAowrBDKScsIHkgPSAnSmFjY2FyZCB0dXJub3ZlciB0ZW1wb3JhbCB0cmVuZCcpCgpwMTMgPC0gZ2dwbG90KHRyZW5kcywgYWVzKG5wcCwgSnR1dHJlbmQsIHNpemUgPSBueXJCVCkpICsKICBnZW9tX3BvaW50KGFlcyhjb2xvciA9IFJFQUxNKSwgc2l6ZSA9IDAuMiwgYWxwaGEgPSAwLjUsIG5hLnJtID0gVFJVRSkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAnZ2FtJywgZm9ybXVsYSA9IHkgfiBzKHgsIGJzID0gImNzIiksIG5hLnJtID0gVFJVRSwgY29sb3IgPSAnYmxhY2snKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGU9IlNldDEiKSArIAogIHNjYWxlX3hfbG9nMTAoKSArCiAgbGFicyh4ID0gJ05ldCBwcmltYXJ5IHByb2R1Y3Rpdml0eSAobWcgQyAvIG0yIC8gZGF5KScsIHkgPSAnSmFjY2FyZCB0dXJub3ZlciB0ZW1wb3JhbCB0cmVuZCcpCgpwMTQgPC0gZ2dwbG90KHRyZW5kcywgYWVzKGh1bWFuLCBKdHV0cmVuZCwgY29sb3IgPSBSRUFMTSwgc2l6ZSA9IG55ckJUKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDAuMiwgYWxwaGEgPSAwLjUsIG5hLnJtID0gVFJVRSkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAnZ2FtJywgZm9ybXVsYSA9IHkgfiBzKHgsIGJzID0gImNzIiwgayA9IDUpLCBuYS5ybSA9IFRSVUUpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZT0iU2V0MSIpICsgCiAgbGFicyh4ID0gJ0Jvd2xlciBodW1hbiBpbXBhY3Qgc2NvcmUnLCB5ID0gJ0phY2NhcmQgdHVybm92ZXIgdGVtcG9yYWwgdHJlbmQnKQoKcDE1IDwtIGdncGxvdCh0cmVuZHMsIGFlcyh0ZW1wdHJlbmQsIEp0dXRyZW5kLCBjb2xvciA9IFJFQUxNLCBzaXplID0gbnlyQlQpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMC4yLCBhbHBoYSA9IDAuNSwgbmEucm0gPSBUUlVFKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICdnYW0nLCBmb3JtdWxhID0geSB+IHMoeCwgYnMgPSAiY3MiKSwgbmEucm0gPSBUUlVFKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGU9IlNldDEiKSArIAogIGxhYnMoeCA9ICdUZW1wZXJhdHVyZSB0cmVuZCAowrBDL3lyKScsIHkgPSAnSmFjY2FyZCB0dXJub3ZlciB0ZW1wb3JhbCB0cmVuZCcpCgojIEphY2NhcmQgdG90YWwgdHJlbmQgdnMuIHRlbXBlcmF0dXJlIHRyZW5kIChhY3Jvc3MgYWxsIHllYXJzKQpwMTYgPC0gZ2dwbG90KHRyZW5kcywgYWVzKHRlbXB0cmVuZCwgSmJldGF0cmVuZCwgY29sb3IgPSBSRUFMTSwgc2l6ZSA9IG55ckJUKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDAuMiwgYWxwaGEgPSAwLjUsIG5hLnJtID0gVFJVRSkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAnZ2FtJywgZm9ybXVsYSA9IHkgfiBzKHgsIGJzID0gImNzIiksIG5hLnJtID0gVFJVRSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlPSJTZXQxIikgKyAKICBsYWJzKHggPSAnVGVtcGVyYXR1cmUgdHJlbmQgKMKwQy95ZWFyKScsIHkgPSAnSmFjY2FyZCB0b3RhbCB0ZW1wb3JhbCB0cmVuZCcpCgoKIyBIb3JuLU1vcmlzaXRhIHR1cm5vdmVyIHRyZW5kIHZzLiB0ZW1wZXJhdHVyZSB0cmVuZCAoYWNyb3NzIGFsbCB5ZWFycykKcDE3IDwtIGdncGxvdCh0cmVuZHMsIGFlcyh0ZW1wdHJlbmQsIEhvcm50cmVuZCwgY29sb3IgPSBSRUFMTSwgc2l6ZSA9IG55ckJUKSkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDAuMiwgYWxwaGEgPSAwLjUsIG5hLnJtID0gVFJVRSkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAnZ2FtJywgZm9ybXVsYSA9IHkgfiBzKHgsIGJzID0gImNzIiksIG5hLnJtID0gVFJVRSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlPSJTZXQxIikgKyAKICBsYWJzKHggPSAnVGVtcGVyYXR1cmUgdHJlbmQgKMKwQy95ZWFyKScsIHkgPSAnTW9yaXNpdGEtSG9ybiB0ZW1wb3JhbCB0dXJub3ZlcicpCgoKZ3JpZC5hcnJhbmdlKHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3LCBwOCwgcDksIHAxMCwgcDExLCBwMTIsIHAxMywgcDE0LCBwMTUsIHAxNiwgcDE3LCBuY29sID0gMikKYGBgClN0cm9uZyB0cmVuZHMgd2l0aCB0ZW1wZXJhdHVyZSBjaGFuZ2UsIGJ1dCB0cmVuZHMgYXJlIHByZXR0eSBzeW1tZXRyaWMgYXJvdW5kIG5vIHRyZW5kIGluIHRlbXBlcmF0dXJlLCB3aGljaCBpbXBsaWVzIHdhcm1pbmcgb3IgY29vbGluZyBkcml2ZXMgc2ltaWxhciBkZWdyZWUgb2YgY29tbXVuaXR5IHR1cm5vdmVyLgpTb21lIGluZGljYXRpb24gb2YgbGVzcyB0dXJub3ZlciBmb3IgbGFyZ2VyIG9yZ2FuaXNtcyAobWFzcykKSGlnaGVyIHR1cm5vdmVyIG9uIGxhbmQgd2l0aCBoaWdoZXIgc2Vhc29uYWxpdHk/Ck1vcmUgdHVybm92ZXIgZm9yIHNob3J0ZXItbGl2ZWQgb3JnYW5pc21zPwpObyByZWFsbHkgY2xlYXIgZGlmZmVyZW5jZXMgYW1vbmcgcmVhbG1zLgoKCgojIyBDb21wYXJlIGNvdmFyaWF0ZXMgYWNyb3NzIHJlYWxtcwpgYGB7ciBjb21wYXJlIGFjcm9zcyByZWFsbXMsIGZpZy5oZWlnaHQ9MTIsIGZpZy53aWR0aD05fQppIDwtIHRyZW5kc1ssICFkdXBsaWNhdGVkKHJhcmVmeUlEKV07IHN1bShpKQpwYXIobWZyb3c9Yyg1LDMpKQpiZWFucGxvdChyYXJlZnlJRF95IH4gUkVBTE0sIGRhdGEgPSB0cmVuZHNbaSxdLCB3aGF0ID0gYygxLDEsMSwxKSwgY29sID0gYygiI0NBQjJENiIsICIjMzNBMDJDIiwgIiNCMkRGOEEiKSwgYm9yZGVyID0gIiNDQUIyRDYiLCB5bGFiID0gJ0xhdGl0dWRlIChkZWdOKScsIGxsID0gMC4wNSkKYmVhbnBsb3QodGVtcGF2ZSB+IFJFQUxNLCBkYXRhID0gdHJlbmRzW2ksXSwgd2hhdCA9IGMoMSwxLDEsMSksIGNvbCA9IGMoIiNDQUIyRDYiLCAiIzMzQTAyQyIsICIjQjJERjhBIiksIGJvcmRlciA9ICIjQ0FCMkQ2IiwgeWxhYiA9ICdUZW1wZXJhdHVyZSAoZGVnQyknLCBsbCA9IDAuMDUpCmJlYW5wbG90KHRlbXBhdmVfbWV0YWIgfiBSRUFMTSwgZGF0YSA9IHRyZW5kc1tpLF0sIHdoYXQgPSBjKDEsMSwxLDEpLCBjb2wgPSBjKCIjQ0FCMkQ2IiwgIiMzM0EwMkMiLCAiI0IyREY4QSIpLCBib3JkZXIgPSAiI0NBQjJENiIsIHlsYWIgPSAnTWV0YWJvbGljIFRlbXBlcmF0dXJlIChkZWdDKScsIGxsID0gMC4wNSwgYncgPSAnbnJkMCcpICMgbnJkMCBiYW5kd2lkdGggdG8gY2FsY3VsYXRpb24gZ2FwCmJlYW5wbG90KHNlYXMgfiBSRUFMTSwgZGF0YSA9IHRyZW5kc1tpLF0sIHdoYXQgPSBjKDEsMSwxLDEpLCBjb2wgPSBjKCIjQ0FCMkQ2IiwgIiMzM0EwMkMiLCAiI0IyREY4QSIpLCBib3JkZXIgPSAiI0NBQjJENiIsIHlsYWIgPSAnU2Vhc29uYWxpdHkgKGRlZ0MpJywgbGwgPSAwLjA1KQpiZWFucGxvdChtaWNyb2NsaW0gfiBSRUFMTSwgZGF0YSA9IHRyZW5kc1tpLF0sIHdoYXQgPSBjKDEsMSwxLDEpLCBjb2wgPSBjKCIjQ0FCMkQ2IiwgIiMzM0EwMkMiLCAiI0IyREY4QSIpLCBib3JkZXIgPSAiI0NBQjJENiIsIHlsYWIgPSAnTWljcm9jbGltYXRlcyAoZGVnQyknLCBsbCA9IDAuMDUpCmJlYW5wbG90KHRlbXB0cmVuZCB+IFJFQUxNLCBkYXRhID0gdHJlbmRzW2ksXSwgd2hhdCA9IGMoMSwxLDEsMSksIGNvbCA9IGMoIiNDQUIyRDYiLCAiIzMzQTAyQyIsICIjQjJERjhBIiksIGJvcmRlciA9ICIjQ0FCMkQ2IiwgeWxhYiA9ICdUZW1wZXJhdHVyZSB0cmVuZCAoZGVnQy95ciknLCBsbCA9IDAuMDUpCmJlYW5wbG90KG1hc3NfbWVhbl93ZWlnaHQgfiBSRUFMTSwgZGF0YSA9IHRyZW5kc1tpLF0sIHdoYXQgPSBjKDEsMSwxLDEpLCBjb2wgPSBjKCIjQ0FCMkQ2IiwgIiMzM0EwMkMiLCAiI0IyREY4QSIpLCBib3JkZXIgPSAiI0NBQjJENiIsIHlsYWIgPSAnTWFzcyAoZyknLCBsbCA9IDAuMDUsIGxvZyA9ICd5JykKYmVhbnBsb3Qoc3BlZWRfbWVhbl93ZWlnaHQgKzEgfiBSRUFMTSwgZGF0YSA9IHRyZW5kc1tpLF0sIHdoYXQgPSBjKDEsMSwxLDEpLCBjb2wgPSBjKCIjQ0FCMkQ2IiwgIiMzM0EwMkMiLCAiI0IyREY4QSIpLCBib3JkZXIgPSAiI0NBQjJENiIsIHlsYWIgPSAnU3BlZWQgKGttL2hyKScsIGxsID0gMC4wNSwgbG9nID0gJ3knKQpiZWFucGxvdChsaWZlc3Bhbl9tZWFuX3dlaWdodCB+IFJFQUxNLCBkYXRhID0gdHJlbmRzW2ksXSwgd2hhdCA9IGMoMSwxLDEsMSksIGNvbCA9IGMoIiNDQUIyRDYiLCAiIzMzQTAyQyIsICIjQjJERjhBIiksIGJvcmRlciA9ICIjQ0FCMkQ2IiwgeWxhYiA9ICdMaWZlc3BhbiAoeXIpJywgbGwgPSAwLjA1LCBsb2cgPSAneScpCiNiZWFucGxvdChjb25zZnJhYyB+IFJFQUxNLCBkYXRhID0gdHJlbmRzW2ksXSwgd2hhdCA9IGMoMSwxLDEsMSksIGNvbCA9IGMoIiNDQUIyRDYiLCAiIzMzQTAyQyIsICIjQjJERjhBIiksIGJvcmRlciA9ICIjQ0FCMkQ2IiwgeWxhYiA9ICdDb25zdW1lcnMgKGZyYWN0aW9uKScsIGxsID0gMC4wNSwgbG9nID0gJycpICMgdG9vIHNwYXJzZQojYmVhbnBsb3QoZW5kb2ZyYWMgfiBSRUFMTSwgZGF0YSA9IHRyZW5kc1tpLF0sIHdoYXQgPSBjKDEsMSwxLDEpLCBjb2wgPSBjKCIjQ0FCMkQ2IiwgIiMzM0EwMkMiLCAiI0IyREY4QSIpLCBib3JkZXIgPSAiI0NBQjJENiIsIHlsYWIgPSAnRW5kb3RoZXJtcyAoZnJhY3Rpb24pJywgbGwgPSAwLjA1LCBsb2cgPSAnJykgIyB0b28gc3BhcnNlCmJlYW5wbG90KE5zcHAgfiBSRUFMTSwgZGF0YSA9IHRyZW5kc1tpLF0sIHdoYXQgPSBjKDEsMSwxLDEpLCBjb2wgPSBjKCIjQ0FCMkQ2IiwgIiMzM0EwMkMiLCAiI0IyREY4QSIpLCBib3JkZXIgPSAiI0NBQjJENiIsIHlsYWIgPSAnTnVtYmVyIG9mIHNwZWNpZXMnLCBsbCA9IDAuMDUsIGxvZyA9ICd5JykKYmVhbnBsb3QodGhlcm1hbF9iaWFzIH4gUkVBTE0sIGRhdGEgPSB0cmVuZHNbaSAmICFpcy5uYSh0aGVybWFsX2JpYXMpLF0sIHdoYXQgPSBjKDEsMSwxLDEpLCBjb2wgPSBjKCIjQ0FCMkQ2IiwgIiMzM0EwMkMiLCAiI0IyREY4QSIpLCBib3JkZXIgPSAiI0NBQjJENiIsIHlsYWIgPSAnVGhlcm1hbCBiaWFzIChkZWdDKScsIGxsID0gMC4wNSkKYmVhbnBsb3QobnBwIH4gUkVBTE0sIGRhdGEgPSB0cmVuZHNbaSxdLCB3aGF0ID0gYygxLDEsMSwxKSwgY29sID0gYygiI0NBQjJENiIsICIjMzNBMDJDIiwgIiNCMkRGOEEiKSwgYm9yZGVyID0gIiNDQUIyRDYiLCB5bGFiID0gJ05QUCcsIGxsID0gMC4wNSkKYmVhbnBsb3QoaHVtYW4gfiBSRUFMTSwgZGF0YSA9IHRyZW5kc1tpLF0sIHdoYXQgPSBjKDEsMSwxLDEpLCBjb2wgPSBjKCIjQ0FCMkQ2IiwgIiMzM0EwMkMiLCAiI0IyREY4QSIpLCBib3JkZXIgPSAiI0NBQjJENiIsIHlsYWIgPSAnSHVtYW4gaW1wYWN0IHNjb3JlJywgbGwgPSAwLjA1KQoKYGBgCk1hcmluZSBhcmUgaW4gZ2VuZXJhbGx5IHdhcm1lciBsb2NhdGlvbnMgKHNlYXdhdGVyIGRvZXNuJ3QgZnJlZXplKQpNYXJpbmUgaGF2ZSBtdWNoIGxvd2VyIHNlYXNvbmFsaXR5LgpNYXJpbmUgYW5kIGZyZXNod2F0ZXIgaGF2ZSBzb21lIHZlcnkgc21hbGwgbWFzc2VzIChwbGFua3RvbiksIGJ1dCBtdWNoIG9mIGRhdGFzZXQgaXMgc2ltaWxhciB0byB0ZXJyZXN0cmlhbC4KTWFyaW5lIGhhcyBhIGxvdCBvZiBzbG93LCBjcmF3bGluZyBvcmdhbmlzbXMsIGJ1dCBsYW5kIGhhcyBwbGFudHMuIExhbmQgYWxzbyBoYXMgYmlyZHMgKGZhc3QpLgoKCgoKIyMgSmFjY2FyZCB0dXJub3ZlciB0ZW1wb3JhbCB0cmVuZApUcnkgc3RhdGljIGNvdmFyaWF0ZXMgcGx1cyBpbnRlcmFjdGlvbnMgb2YgYWJzIHRlbXBlcmF0dXJlIHRyZW5kIHdpdGggZWFjaCBjb3ZhcmlhdGU6CgotIHJlYWxtCi0gZW52aXJvbm1lbnRhbCB0ZW1wZXJhdHVyZQotIGF2ZXJhZ2UgbWV0YWJvbGljIHRlbXBlcmF0dXJlCi0gc2Vhc29uYWxpdHkKLSBtaWNyb2NsaW1hdGVzCi0gTlBQCi0gc3BlZWQKLSBtYXNzCi0gbGlmZXNwYW4KLSBjb25zdW1lciB2cy4gcHJvZHVjZXIKLSB0aGVybWFsIGJpYXMKCkV4Y2VwdCBmb3IgdGhlcm1hbCBiaWFzOiBpbnRlcmFjdCB3aXRoIHRlbXBlcmF0dXJlIHRyZW5kIChub3QgYWJzKQoKIyMjIEZ1bGwgbW9kZWwKYGBge3IgTE1FIEphY2FyZCB0dXJub3ZlciB0ZW1wZXJhdHVyZX0KaSA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhKdHV0cmVuZCwgUkVBTE0sIHRlbXBhdmUuc2MsIHRlbXBhdmVfbWV0YWIuc2MsIHNlYXMuc2MsIG1pY3JvY2xpbS5zYywgdGVtcHRyZW5kLnNjLCB0ZW1wdHJlbmRfYWJzLnNjLCAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzcy5zYywgc3BlZWQuc2MsIGxpZmVzcGFuLnNjLCBjb25zdW1lcmZyYWMuc2MsIGVuZG90aGVybWZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCBodW1hbi5zYyldCgpyYW5kZWYgPC0gbGlzdChTVFVEWV9JRCA9IH4gdGVtcHRyZW5kX2Ficy5zYywgcmFyZWZ5SUQgPSB+MSkKdmFyZWYgPC0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKQoKaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kVGZ1bGwxLnJkcycpKXsKICBtb2RUZnVsbDEgPC0gcmVhZFJEUygndGVtcC9tb2RUZnVsbDEucmRzJykKfSBlbHNlIHsKICBtb2RUZnVsbDEgPC0gbG1lKEp0dXRyZW5kIH4gdGVtcHRyZW5kX2Ficy5zYypSRUFMTSArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmUuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmVfbWV0YWIuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzZWFzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWljcm9jbGltLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWFzcy5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNwZWVkLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbGlmZXNwYW4uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypjb25zdW1lcmZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmVuZG90aGVybWZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmQuc2MqdGhlcm1hbF9iaWFzLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypucHAuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmh1bWFuLnNjKlJFQUxNLAogICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaSxdLCBtZXRob2QgPSAnUkVNTCcpCiAgc2F2ZVJEUyhtb2RUZnVsbDEsIGZpbGUgPSAndGVtcC9tb2RUZnVsbDEucmRzJykKfQoKc3VtbWFyeShtb2RUZnVsbDEpCgoKYGBgCgoKIyMjIyBUcnkgc2ltcGxpZnlpbmcgdGhlIG1vZGVsCmBgYHtyIHNpbXBsaWZ5IG1vZFRmdWxsMX0KaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kVGZ1bGwxc2ltcC5yZHMnKSl7CiAgbW9kVGZ1bGwxc2ltcCA8LSByZWFkUkRTKCd0ZW1wL21vZFRmdWxsMXNpbXAucmRzJykKfSBlbHNlIHsKICByZXF1aXJlKE1BU1MpICMgZm9yIHN0ZXBBSUMKICBtb2RUZnVsbDFtbCA8LSB1cGRhdGUobW9kVGZ1bGwxLCBtZXRob2QgPSAnTUwnKQogIG1vZFRmdWxsMXNpbXAgPC0gc3RlcEFJQyhtb2RUZnVsbDFtbCwgZGlyZWN0aW9uID0gJ2JhY2t3YXJkJykKICBzYXZlUkRTKG1vZFRmdWxsMXNpbXAsIGZpbGUgPSAndGVtcC9tb2RUZnVsbDFzaW1wLnJkcycpCn0Kc3VtbWFyeShtb2RUZnVsbDFzaW1wKQoKYGBgCgoKIyMjIyBQbG90IHRoZSBjb2VmZmljaWVudHMKYGBge3IgcGxvdCBmdWxsVG1vZDFzaW1wfQptb2RUZnVsbDFzaW1wcmVtbCA8LSB1cGRhdGUobW9kVGZ1bGwxc2ltcCwgbWV0aG9kID0gJ1JFTUwnKQoKIyBmYWlscyBhdCBpbnNpZ2h0Ojptb2RlbF9pbmZvKCkgaW4gcGxvdF9tb2RlbCgpLi4uIHVnaAojIHJlcXVpcmUoc2pQbG90KQojIHAxIDwtIHBsb3RfbW9kZWwobW9kVGZ1bGwxc2ltcHJlbWwsIHR5cGUgPSAnZXN0JywgdGVybXMgPSAndGVtcHRyZW5kc19hYnMuc2MnKSArIHlsaW0oLTAuMDExLCAwLjAyKQojIHAyPC0gcGxvdF9tb2RlbChtb2RUZnVsbDFzaW1wcmVtbCwgdHlwZSA9ICdlc3QnLCB0ZXJtcyA9ICdSRUFMTSBbVGVycmVzdHJpYWwsTWFyaW5lXScpICsgeWxpbSgtMC4wLCAwLjEpCiMgZ3JpZC5hcnJhbmdlKHAxLCBwMiwgbnJvdyA9IDEpCgpjb2VmcyA8LSBzdW1tYXJ5KG1vZFRmdWxsMXNpbXByZW1sKSR0VGFibGUKcGFyKG1mcm93PWMoMSwyKSwgbGFzID0gMSwgbWFpID0gYygwLjUsIDIsIDAuMSwgMC4xKSkKcm93czEgPC0gd2hpY2goIWdyZXBsKCdJbnRlcmNlcHR8UkVBTE0nLCByb3duYW1lcyhjb2VmcykpKQpwbG90KDAsMCwgY29sID0gJ3doaXRlJywgeGxpbT1jKC0wLjAyLCAwLjAzNSksIHlsaW0gPSBjKDEsbGVuZ3RoKHJvd3MxKSksIHlheHQ9J24nLCB4bGFiID0gJycsIHlsYWIgPScnKQpheGlzKDIsIGF0ID0gbGVuZ3RoKHJvd3MxKToxLCBsYWJlbHMgPSByb3duYW1lcyhjb2Vmcylbcm93czFdLCBjZXguYXhpcyA9IDAuNykKYWJsaW5lKHYgPSAwLCBjb2wgPSAnZ3JleScpCmZvcihpIGluIDE6bGVuZ3RoKHJvd3MxKSl7CiAgeCA9IGNvZWZzW3Jvd3MxW2ldLCAxXQogIHNlID0gY29lZnNbcm93czFbaV0sIDJdCiAgcG9pbnRzKHgsIGxlbmd0aChyb3dzMSkgKyAxIC0gaSwgcGNoID0gMTYpCiAgbGluZXMoeCA9IGMoeC1zZSwgeCtzZSksIHkgPSBjKGxlbmd0aChyb3dzMSkgKyAxIC0gaSwgbGVuZ3RoKHJvd3MxKSArIDEgLSBpKSkKfQoKcm93czIgPC0gd2hpY2goZ3JlcGwoJ1JFQUxNJywgcm93bmFtZXMoY29lZnMpKSAmICFncmVwbCgnOicsIHJvd25hbWVzKGNvZWZzKSkpCnBsb3QoMCwwLCBjb2wgPSAnd2hpdGUnLCB4bGltPWMoLTAuMCwgMC4xKSwgeWxpbSA9IGMoMSxsZW5ndGgocm93czIpKSwgeWF4dD0nbicsIHhsYWIgPSAnJywgeWxhYiA9JycpCmF4aXMoMiwgYXQgPSBsZW5ndGgocm93czIpOjEsIGxhYmVscyA9IHJvd25hbWVzKGNvZWZzKVtyb3dzMl0sIGNleC5heGlzID0gMC43KQphYmxpbmUodiA9IDAsIGNvbCA9ICdncmV5JykKZm9yKGkgaW4gMTpsZW5ndGgocm93czIpKXsKICB4ID0gY29lZnNbcm93czJbaV0sIDFdCiAgc2UgPSBjb2Vmc1tyb3dzMltpXSwgMl0KICBwb2ludHMoeCwgbGVuZ3RoKHJvd3MyKSArIDEgLSBpLCBwY2ggPSAxNikKICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHJvd3MyKSArIDEgLSBpLCBsZW5ndGgocm93czIpICsgMSAtIGkpKQp9CgpgYGAKCiMjIyMgUGxvdCByZXNpZHVhbHMgYWdhaW5zdCBlYWNoIHByZWRpY3RvcgpgYGB7ciByZXNpZHMgbW9kVGZ1bGwxc2ltcCwgZmlnLmhlaWdodCA9IDEwLCBmaWcud2lkdGg9MTB9CnJlc2lkcyA8LSByZXNpZChtb2RUZnVsbDFzaW1wcmVtbCkKcHJlZHMgPC0gZ2V0RGF0YShtb2RUZnVsbDFzaW1wcmVtbCkKY29sID0gJyMwMDAwMDAzMycKY2V4ID0gMC41CnBhcihtZnJvdyA9IGMoNCw0KSkKYm94cGxvdChyZXNpZHMgfiBwcmVkcyRSRUFMTSwgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkdGVtcHRyZW5kX2Ficy5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyR0ZW1wdHJlbmQuc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkdGVtcGF2ZS5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyR0ZW1wYXZlX21ldGFiLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJHNlYXMuc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkbWljcm9jbGltLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJG1hc3Muc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkc3BlZWQuc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkbGlmZXNwYW4uc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkY29uc3VtZXJmcmFjLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJGVuZG90aGVybWZyYWMuc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkbnNwcC5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyR0aGVybWFsX2JpYXMuc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkbnBwLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJGh1bWFuLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpgYGAKCiMjIFNlbnNpdGl2aXR5IGFuYWx5c2lzOiB0b3RhbCB0dXJub3ZlciBhbmQgTW9yaXNpdGEtSG9ybiBtb2RlbHMKYGBge3IgTE1FIEphY2FyZCB0b3RhbCBhbmQgTUggbW9kZWxzLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9OH0KaTIgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSmJldGF0cmVuZCwgUkVBTE0sIHRlbXBhdmUuc2MsIHRlbXBhdmVfbWV0YWIuc2MsIHNlYXMuc2MsIG1pY3JvY2xpbS5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kLnNjLCB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgbGlmZXNwYW4uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyZnJhYy5zYywgZW5kb3RoZXJtZnJhYy5zYywgbnNwcC5zYywgdGhlcm1hbF9iaWFzLnNjLCBucHAuc2MsIGh1bWFuLnNjKV0KaTMgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSG9ybnRyZW5kLCBSRUFMTSwgdGVtcGF2ZS5zYywgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmQuc2MsIHRlbXB0cmVuZF9hYnMuc2MsIG1hc3Muc2MsIHNwZWVkLnNjLCBsaWZlc3Bhbi5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJmcmFjLnNjLCBlbmRvdGhlcm1mcmFjLnNjLCBuc3BwLnNjLCB0aGVybWFsX2JpYXMuc2MsIG5wcC5zYywgaHVtYW4uc2MpXQoKcmFuZGVmIDwtIGxpc3QoU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpCnZhcmVmIDwtIHZhclBvd2VyKC0wLjUsIH5ueXJCVCkKCiMgZnVsbCBtb2RlbHMKaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kVGZ1bGxKYmV0YS5yZHMnKSl7CiAgbW9kVGZ1bGxKYmV0YSA8LSByZWFkUkRTKCd0ZW1wL21vZFRmdWxsSmJldGEucmRzJykKfSBlbHNlIHsKICBtb2RUZnVsbEpiZXRhIDwtIGxtZShKYmV0YXRyZW5kIH4gdGVtcHRyZW5kX2Ficy5zYypSRUFMTSArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmUuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmVfbWV0YWIuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzZWFzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWljcm9jbGltLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWFzcy5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNwZWVkLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbGlmZXNwYW4uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypjb25zdW1lcmZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmVuZG90aGVybWZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmQuc2MqdGhlcm1hbF9iaWFzLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypucHAuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmh1bWFuLnNjKlJFQUxNLAogICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaTIsXSwgbWV0aG9kID0gJ1JFTUwnKQogIHNhdmVSRFMobW9kVGZ1bGxKYmV0YSwgZmlsZSA9ICd0ZW1wL21vZFRmdWxsSmJldGEucmRzJykKfQoKaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kVGZ1bGxIb3JuLnJkcycpKXsKICBtb2RUZnVsbEhvcm4gPC0gcmVhZFJEUygndGVtcC9tb2RUZnVsbEhvcm4ucmRzJykKfSBlbHNlIHsKICBtb2RUZnVsbEhvcm4gPC0gbG1lKEhvcm50cmVuZCB+IHRlbXB0cmVuZF9hYnMuc2MqUkVBTE0gKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlX21ldGFiLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc2Vhcy5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1pY3JvY2xpbS5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1hc3Muc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzcGVlZC5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmxpZmVzcGFuLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqY29uc3VtZXJmcmFjLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyplbmRvdGhlcm1mcmFjLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypuc3BwLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kLnNjKnRoZXJtYWxfYmlhcy5zYyArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnBwLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypodW1hbi5zYypSRUFMTSwKICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kzLF0sIG1ldGhvZCA9ICdSRU1MJykKICBzYXZlUkRTKG1vZFRmdWxsSG9ybiwgZmlsZSA9ICd0ZW1wL21vZFRmdWxsSG9ybi5yZHMnKQp9CgpzdW1tYXJ5KG1vZFRmdWxsSmJldGEpCnN1bW1hcnkobW9kVGZ1bGxIb3JuKQoKIyBzaW1wbGlmeQppZihmaWxlLmV4aXN0cygndGVtcC9tb2RUZnVsbEpiZXRhc2ltcC5yZHMnKSl7CiAgbW9kVGZ1bGxKYmV0YXNpbXAgPC0gcmVhZFJEUygndGVtcC9tb2RUZnVsbEpiZXRhc2ltcC5yZHMnKQp9IGVsc2UgewogIHJlcXVpcmUoTUFTUykgIyBmb3Igc3RlcEFJQwogIG1vZFRmdWxsSmJldGFtbCA8LSB1cGRhdGUobW9kVGZ1bGxKYmV0YSwgbWV0aG9kID0gJ01MJykKICBtb2RUZnVsbEpiZXRhc2ltcCA8LSBzdGVwQUlDKG1vZFRmdWxsSmJldGFtbCwgZGlyZWN0aW9uID0gJ2JhY2t3YXJkJykKICBzYXZlUkRTKG1vZFRmdWxsSmJldGFzaW1wLCBmaWxlID0gJ3RlbXAvbW9kVGZ1bGxKYmV0YXNpbXAucmRzJykKfQoKaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kVGZ1bGxIb3Juc2ltcC5yZHMnKSl7CiAgbW9kVGZ1bGxIb3Juc2ltcCA8LSByZWFkUkRTKCd0ZW1wL21vZFRmdWxsSG9ybnNpbXAucmRzJykKfSBlbHNlIHsKICByZXF1aXJlKE1BU1MpICMgZm9yIHN0ZXBBSUMKICBtb2RUZnVsbEhvcm5tbCA8LSB1cGRhdGUobW9kVGZ1bGxIb3JuLCBtZXRob2QgPSAnTUwnKQogIG1vZFRmdWxsSG9ybnNpbXAgPC0gc3RlcEFJQyhtb2RUZnVsbEhvcm5tbCwgZGlyZWN0aW9uID0gJ2JhY2t3YXJkJykKICBzYXZlUkRTKG1vZFRmdWxsSG9ybnNpbXAsIGZpbGUgPSAndGVtcC9tb2RUZnVsbEhvcm5zaW1wLnJkcycpCn0KCnN1bW1hcnkobW9kVGZ1bGxKYmV0YXNpbXApCnN1bW1hcnkobW9kVGZ1bGxIb3Juc2ltcCkKCmlmKGZpbGUuZXhpc3RzKCd0ZW1wL21vZFRmdWxsSmJldGFzaW1wcmVtbC5yZHMnKSl7CiAgbW9kVGZ1bGxKYmV0YXNpbXByZW1sIDwtIHJlYWRSRFMoJ3RlbXAvbW9kVGZ1bGxKYmV0YXNpbXByZW1sLnJkcycpCn0gZWxzZSB7CiAgbW9kVGZ1bGxKYmV0YXNpbXByZW1sIDwtIHVwZGF0ZShtb2RUZnVsbEpiZXRhc2ltcCwgbWV0aG9kID0gJ1JFTUwnKQogIHNhdmVSRFMobW9kVGZ1bGxKYmV0YXNpbXByZW1sLCBmaWxlID0gJ3RlbXAvbW9kVGZ1bGxKYmV0YXNpbXByZW1sLnJkcycpCn0KaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kVGZ1bGxIb3Juc2ltcHJlbWwucmRzJykpewogIG1vZFRmdWxsSG9ybnNpbXByZW1sIDwtIHJlYWRSRFMoJ3RlbXAvbW9kVGZ1bGxKYmV0YXNpbXByZW1sLnJkcycpCn0gZWxzZSB7CiAgbW9kVGZ1bGxIb3Juc2ltcHJlbWwgPC0gdXBkYXRlKG1vZFRmdWxsSG9ybnNpbXAsIG1ldGhvZCA9ICdSRU1MJykKICBzYXZlUkRTKG1vZFRmdWxsSG9ybnNpbXByZW1sLCBmaWxlID0gJ3RlbXAvbW9kVGZ1bGxIb3Juc2ltcHJlbWwucmRzJykKfQoKIyBwbG90IGNvZWZzCmNvZWZzMiA8LSBzdW1tYXJ5KG1vZFRmdWxsSmJldGFzaW1wcmVtbCkkdFRhYmxlCmNvZWZzMyA8LSBzdW1tYXJ5KG1vZFRmdWxsSG9ybnNpbXByZW1sKSR0VGFibGUKdmFyc3RvcGxvdCA8LSB1bmlxdWUoYyhyb3duYW1lcyhjb2VmczIpLCByb3duYW1lcyhjb2VmczMpKSkKCnJvd3MxIDwtIHdoaWNoKCFncmVwbCgnSW50ZXJjZXB0fFJFQUxNJywgdmFyc3RvcGxvdCkgfCBncmVwbCgnOicsIHZhcnN0b3Bsb3QpKSAjIHZhcnMgdG8gcGxvdCBpbiBmaXJzdCBncmFwaApyb3dzMV8yIDwtIHdoaWNoKHJvd25hbWVzKGNvZWZzMikgJWluJSB2YXJzdG9wbG90W3Jvd3MxXSkgIyByb3dzIGluIGNvZWZzMgpyb3dzMV8zIDwtIHdoaWNoKHJvd25hbWVzKGNvZWZzMykgJWluJSB2YXJzdG9wbG90W3Jvd3MxXSkgIyByb3dzIGluIGNvZWZzMwp4bGltczEgPC0gcmFuZ2UoYyhjb2VmczJbcm93czFfMiwxXSAtIGNvZWZzMltyb3dzMV8yLDJdLCAKICAgICAgICAgICAgICAgICAgY29lZnMyW3Jvd3MxXzIsMV0gKyBjb2VmczJbcm93czFfMiwyXSwgCiAgICAgICAgICAgICAgICAgIGNvZWZzM1tyb3dzMV8zLDFdIC0gY29lZnMzW3Jvd3MxXzMsMl0sIAogICAgICAgICAgICAgICAgICBjb2VmczNbcm93czFfMywxXSArIGNvZWZzM1tyb3dzMV8zLDJdKSkKCnJvd3MyIDwtIHdoaWNoKGdyZXBsKCdSRUFMTScsIHZhcnN0b3Bsb3QpICYgIWdyZXBsKCc6JywgdmFyc3RvcGxvdCkpICMgdmFycyB0byBwbG90IGluIDJuZCBncmFwaApyb3dzMl8yIDwtIHdoaWNoKHJvd25hbWVzKGNvZWZzMikgJWluJSB2YXJzdG9wbG90W3Jvd3MyXSkgIyByb3dzIGluIGNvZWZzMgpyb3dzMl8zIDwtIHdoaWNoKHJvd25hbWVzKGNvZWZzMykgJWluJSB2YXJzdG9wbG90W3Jvd3MyXSkgIyByb3dzIGluIGNvZWZzMwp4bGltczIgPC0gcmFuZ2UoYyhjb2VmczJbcm93czJfMiwxXSAtIGNvZWZzMltyb3dzMl8yLDJdLCAKICAgICAgICAgICAgICAgICAgY29lZnMyW3Jvd3MyXzIsMV0gKyBjb2VmczJbcm93czJfMiwyXSwgCiAgICAgICAgICAgICAgICAgIGNvZWZzM1tyb3dzMl8zLDFdIC0gY29lZnMzW3Jvd3MyXzMsMl0sIAogICAgICAgICAgICAgICAgICBjb2VmczNbcm93czJfMywxXSArIGNvZWZzM1tyb3dzMl8zLDJdKSkKCmNvbHMgPC0gYygnYmxhY2snLCAnZ3JleScpICMgZm9yIEpiZXRhIGFuZCBIb3JuIG1vZGVscywgcmVzcGVjdGl2ZWx5Cm9mZnMgPC0gMC4xICMgb2Zmc2V0IHZlcnRpY2FsbHkgZm9yIHRoZSB0d28gbW9kZWxzCgpwYXIobWZyb3c9YygxLDIpLCBsYXMgPSAxLCBtYWkgPSBjKDAuNSwgMywgMC4xLCAwLjEpKQoKcGxvdCgwLDAsIGNvbCA9ICd3aGl0ZScsIHhsaW09eGxpbXMxLCB5bGltID0gYygxLGxlbmd0aChyb3dzMSkpLCB5YXh0PSduJywgeGxhYiA9ICcnLCB5bGFiID0nJykKYXhpcygyLCBhdCA9IGxlbmd0aChyb3dzMSk6MSwgbGFiZWxzID0gdmFyc3RvcGxvdFtyb3dzMV0sIGNleC5heGlzID0gMC43KQphYmxpbmUodiA9IDAsIGNvbCA9ICdncmV5JykKZm9yKGkgaW4gMTpsZW5ndGgocm93czEpKXsKICBpZih2YXJzdG9wbG90W3Jvd3MxW2ldXSAlaW4lIHJvd25hbWVzKGNvZWZzMikpewogICAgeCA9IGNvZWZzMltyb3duYW1lcyhjb2VmczIpID09IHZhcnN0b3Bsb3Rbcm93czFbaV1dLCAxXQogICAgc2UgPSBjb2VmczJbcm93bmFtZXMoY29lZnMyKSA9PSB2YXJzdG9wbG90W3Jvd3MxW2ldXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgocm93czEpICsgMSAtIGkgKyBvZmZzLCBwY2ggPSAxNiwgY29sID0gY29sc1sxXSkKICAgIGxpbmVzKHggPSBjKHgtc2UsIHgrc2UpLCB5ID0gYyhsZW5ndGgocm93czEpICsgMSAtIGkgKyBvZmZzLCBsZW5ndGgocm93czEpICsgMSAtIGkgKyBvZmZzKSwgY29sID0gY29sc1sxXSkKICB9CiAgaWYodmFyc3RvcGxvdFtyb3dzMVtpXV0gJWluJSByb3duYW1lcyhjb2VmczMpKXsKICAgIHggPSBjb2VmczNbcm93bmFtZXMoY29lZnMzKSA9PSB2YXJzdG9wbG90W3Jvd3MxW2ldXSwgMV0KICAgIHNlID0gY29lZnMzW3Jvd25hbWVzKGNvZWZzMykgPT0gdmFyc3RvcGxvdFtyb3dzMVtpXV0sIDJdCiAgICBwb2ludHMoeCwgbGVuZ3RoKHJvd3MxKSArIDEgLSBpIC0gb2ZmcywgcGNoID0gMTYsIGNvbCA9IGNvbHNbMl0pCiAgICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHJvd3MxKSArIDEgLSBpIC0gb2ZmcywgbGVuZ3RoKHJvd3MxKSArIDEgLSBpIC0gb2ZmcyksIGNvbCA9IGNvbHNbMl0pCiAgfQp9CgpwbG90KDAsMCwgY29sID0gJ3doaXRlJywgeGxpbT14bGltczIsIHlsaW0gPSBjKDEsbGVuZ3RoKHJvd3MyKSksIHlheHQ9J24nLCB4bGFiID0gJycsIHlsYWIgPScnKQpheGlzKDIsIGF0ID0gbGVuZ3RoKHJvd3MyKToxLCBsYWJlbHMgPSB2YXJzdG9wbG90W3Jvd3MyXSwgY2V4LmF4aXMgPSAwLjcpCmFibGluZSh2ID0gMCwgY29sID0gJ2dyZXknKQpmb3IoaSBpbiAxOmxlbmd0aChyb3dzMikpewogIGlmKHZhcnN0b3Bsb3Rbcm93czJbaV1dICVpbiUgcm93bmFtZXMoY29lZnMyKSl7CiAgICB4ID0gY29lZnMyW3Jvd25hbWVzKGNvZWZzMikgPT0gdmFyc3RvcGxvdFtyb3dzMltpXV0sIDFdCiAgICBzZSA9IGNvZWZzMltyb3duYW1lcyhjb2VmczIpID09IHZhcnN0b3Bsb3Rbcm93czJbaV1dLCAyXQogICAgcG9pbnRzKHgsIGxlbmd0aChyb3dzMikgKyAxIC0gaSArIG9mZnMsIHBjaCA9IDE2LCBjb2wgPSBjb2xzWzFdKQogICAgbGluZXMoeCA9IGMoeC1zZSwgeCtzZSksIHkgPSBjKGxlbmd0aChyb3dzMikgKyAxIC0gaSArIG9mZnMsIGxlbmd0aChyb3dzMikgKyAxIC0gaSArIG9mZnMpLCBjb2wgPSBjb2xzWzFdKQogIH0KICBpZih2YXJzdG9wbG90W3Jvd3MyW2ldXSAlaW4lIHJvd25hbWVzKGNvZWZzMykpewogICAgeCA9IGNvZWZzM1tyb3duYW1lcyhjb2VmczMpID09IHZhcnN0b3Bsb3Rbcm93czJbaV1dLCAxXQogICAgc2UgPSBjb2VmczNbcm93bmFtZXMoY29lZnMzKSA9PSB2YXJzdG9wbG90W3Jvd3MyW2ldXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgocm93czIpICsgMSAtIGkgLSBvZmZzLCBwY2ggPSAxNiwgY29sID0gY29sc1syXSkKICAgIGxpbmVzKHggPSBjKHgtc2UsIHgrc2UpLCB5ID0gYyhsZW5ndGgocm93czIpICsgMSAtIGkgLSBvZmZzLCBsZW5ndGgocm93czIpICsgMSAtIGkgLSBvZmZzKSwgY29sID0gY29sc1syXSkKICB9Cn0KCmBgYApCbGFjayBpcyBmb3IgSmFjY2FyZCB0b3RhbCB0dXJub3ZlciAocHJlcy9hYnMpLCBncmV5IGlzIGZvciBNb3Jpc2l0YS1Ib3JuIHR1cm5vdmVyIChjb25zaWRlcnMgYWJ1bmRhbmNlKQoKIyBUbyBkbwoK